gpt4 book ai didi

python - 在 Python 3 中按相同值对字典列表进行分组

转载 作者:太空狗 更新时间:2023-10-30 02:53:28 27 4
gpt4 key购买 nike

给定一个字典列表:

players= [
{ "name": 'matt', 'school': 'WSU', 'homestate': 'CT', 'position': 'RB' },
{ "name": 'jack', 'school': 'ASU', 'homestate': 'AL', 'position': 'QB' },
{ "name": 'john', 'school': 'WSU', 'homestate': 'MD', 'position': 'LB' },
{ "name": 'kevin', 'school': 'ALU', 'homestate': 'PA', 'position': 'LB' },
{ "name": 'brady', 'school': 'UM', 'homestate': 'CA', 'position': 'QB' },
]

我如何通过匹配它们匹配的字典值将它们分组,这样它就会喷出:

Matching Value 1:

name: [matt, john, kevin],

school: [WSU, WSU, ALU],

homestate: [CT, MD, PA]

position: [RB, LB, LB]

匹配值 2:

name: [jack, brady],

school: [ASU, UM],

homestate: [AL, CA]

position: [QB, QB]

注意匹配值是任意的;也就是说,它随处可见。也许它在 school 或在 position,或者两者兼而有之。

我尝试通过以下方式对它们进行分组:

from collections import defaultdict

result_dictionary = {}

for i in players:
for key, value in i.items():
result_dictionary.setdefault(key, []).append(value)

给出:

{'name': ['matt', 'jack', 'john', 'kevin', 'brady'], 
'school': ['WSU', 'ASU', 'WSU', 'ALU', 'UM'],
'homestate': ['CT', 'AL', 'MD', 'PA', 'CA'],
'position': ['RB', 'QB', 'LB', 'QB', 'QB']}

但我一直在思考如何进一步操纵输出以匹配我上面所述的所需输出,而且我确信有更好、更简单的方法来实现这一点。

最佳答案

只需使用您已经导入的collections.defaultdict:

In [21]: from collections import defaultdict
...: result = defaultdict(lambda: defaultdict(list))
...: for d in players:
...: for k,v in d.items():
...: result[d['school']][k].append(v)
...:

In [22]: result
Out[22]:
defaultdict(<function __main__.<lambda>>,
{'ASU': defaultdict(list,
{'homestate': ['AL'],
'name': ['jack'],
'position': ['QB'],
'school': ['ASU']}),
'WSU': defaultdict(list,
{'homestate': ['CT', 'MD'],
'name': ['matt', 'john'],
'position': ['RB', 'LB'],
'school': ['WSU', 'WSU']})})

关于python - 在 Python 3 中按相同值对字典列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49399471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com