在Python 3中使用相同的值对字典列表进行分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python 3中使用相同的值对字典列表进行分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1766字,纯文字阅读大概需要3分钟。
内容图文
![在Python 3中使用相同的值对字典列表进行分组](/upload/InfoBanner/zyjiaocheng/797/a89f1af7c5a042b2a79014c9f86d54e1.jpg)
给出一个词典列表:
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]
请注意,匹配值是任意的;也就是说,它可以在任何地方找到.也许它在学校或在位,或者两者兼而有之.
我尝试通过执行以下操作对它们进
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 3中使用相同的值对字典列表进行分组全部内容,希望文章能够帮你解决在Python 3中使用相同的值对字典列表进行分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。