这是我拥有的一些数据的简化示例:
{"id": "1234565", "fields": {"name": "john", "email":"[email protected]", "country": "uk"}}
整个嵌套字典是一个更大的地址数据列表。目标是从列表中创建一对具有随机伴侣的人,其中来自同一国家/地区的伴侣应该是首选。因此,我的第一个真正问题是找到一种按国家/地区价值对它们进行分组的好方法。
我确信有一种比迭代字典并将所有记录写入某个新列表/字典更聪明的方法?
我认为这接近你所需要的:
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"])
asldkfjaslfjaslfjlkfj jasldfkjalfjalsjfas asldfkjalfjasljflasjf alsdjfalskjdfaslfjsa