按嵌套值过滤/分组字典

问题描述 投票:0回答:2

这是我拥有的一些数据的简化示例:

{"id": "1234565", "fields": {"name": "john", "email":"[email protected]", "country": "uk"}}

整个嵌套字典是一个更大的地址数据列表。目标是从列表中创建一对具有随机伴侣的人,其中来自同一国家/地区的伴侣应该是首选。因此,我的第一个真正问题是找到一种按国家/地区价值对它们进行分组的好方法。

我确信有一种比迭代字典并将所有记录写入某个新列表/字典更聪明的方法?

python dictionary
2个回答
4
投票

我认为这接近你所需要的:

result = {key:[i for i in value] for key, value in itertools.groupby(people, lambda item: item["fields"]["country"])}

它的作用是使用

itertools.groupby
按指定国家/地区对
people
列表中的所有人员进行分组。生成的字典将国家/地区作为键,将解包的分组(匹配人员)作为值。输入预计为字典列表,如示例中的字典列表:

people = [{"id": "1234565", "fields": {"name": "john", "email":"[email protected]", "country": "uk"}}, 
          {"id": "654321", "fields": {"name": "sam", "email":"[email protected]", "country": "uk"}}]

输出示例:

>>> print(result)
>>> {'uk': [{'fields': {'name': 'john', 'email': '[email protected]', 'country': 'uk'}, 'id': '1234565'}, {'fields': {'name': 'sam', 'email': '[email protected]', 'country': 'uk'}, 'id': '654321'}]}

为了获得更清晰的结果,可以调整循环结构,以便结果字典中仅包含每个人的 ID:

result = {key:[i["id"] for i in value] for key, value in itertools.groupby(people, lambda item: item["fields"]["country"])}
>>> print(result)
>>> {'uk': ['1234565', '654321']}

编辑:抱歉,我忘记了排序。只需按国家/地区对人员列表进行排序,然后再进行

groupby
。现在应该可以正常工作了:

sort = sorted(people, key=lambda item: item["fields"]["country"])

0
投票

asldkfjaslfjaslfjlkfj jasldfkjalfjalsjfas asldfkjalfjasljflasjf alsdjfalskjdfaslfjsa

© www.soinside.com 2019 - 2024. All rights reserved.