【发布时间】:2018-03-21 06:16:59
【问题描述】:
给定一个字典列表:
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' },
]
我如何通过匹配它们匹配的字典值将它们分组,以便它喷出:
匹配值 1:
姓名:[马特,约翰,凯文],
学校:[WSU、WSU、ALU],
家乡:[CT、MD、PA]
位置:[RB, LB, LB]
匹配值 2:
姓名:[杰克,布雷迪],
学校:[ASU,UM],
家乡:[AL,CA]
位置:[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']}
但我不知道如何进一步操作输出以匹配我上面所说的所需输出,我相信有更好、更简单的方法来做。
【问题讨论】:
-
如果您有选择,那么我建议您使用 pandas。您可以轻松分组
-
"匹配值是任意的;也就是说,它可以在任何地方找到。可能在学校或位置,或者两者兼而有之。"这还不清楚。你能举个例子说明一下吗?
-
@juanpa.arrivillaga 我已经编辑了问题以澄清它。
-
我不完全确定这里的规则是什么(如果马特和约翰上同一所学校,但马特和杰克扮演相同的位置怎么办?你有一个马特和约翰小组和一个马特和杰克小组? 或者即使 John 和 Jack 没有任何共同点,也可以将它们合并为一组?或者任意选择一个与 Matt 放在一起?或者非任意选择(尝试最大化或最小化组的数量,也许)?或者......?
-
如果这个问题的答案意味着不应该将玩家置于某种等价类风格的分区中:如果马特和约翰上同一所学校并且扮演相同的位置怎么办?是否有一个 Matt&John 小组,或者两个,或者可以接受?
标签: python python-3.x dictionary