python-3.x - 如何合并这个字典列表?
问题描述
input = [{
'roll_no': ['123445', '1212'],
'school_id': 1
}, {
'roll_no': ['HA-4848231'],
'school_id': 2
}, {
'roll_no': ['473427'],
'school_id': 2
}, {
'roll_no': ['092112'],
'school_id': 5
}]
如何使用相同的键合并此字典列表school_id
。假设 ifschool_id
为 2,然后将它们合并到一个字典中。在输出下方,您可以看到第 2 和第 3 个字典已合并,因为它们的值相同school_id
为 2。
回答:
[{
'roll_no': ['123445', '1212'],
'school_id': 1
}, {
'roll_no': ['473427', 'HA-4848231'],
'school_id': 2
}, {
'roll_no': ['092112'],
'school_id': 5
}]
解决方案
In [4]: from collections import defaultdict
In [16]: a
Out[16]:
[{'roll_no': ['123445', '1212'], 'school_id': 1},
{'roll_no': ['HA-4848231'], 'school_id': 2},
{'roll_no': ['473427'], 'school_id': 2},
{'roll_no': ['092112'], 'school_id': 5}]
In [5]: ans = defaultdict(list)
In [10]: for i in a:
...: ans[i["school_id"]].extend(i["roll_no"])
In [11]: ans
Out[11]:
defaultdict(list,
{1: ['123445', '1212'],
2: ['HA-4848231', '473427'],
5: ['092112']})
In [15]: [{"schoold_id":k,"roll_no":v} for k,v in ans.items()]
Out[15]:
[{'schoold_id': 1, 'roll_no': ['123445', '1212']},
{'schoold_id': 2, 'roll_no': ['HA-4848231', '473427']},
{'schoold_id': 5, 'roll_no': ['092112']}]
推荐阅读
- rest - Rest api vs sqoop
- typescript - 按键访问时返回类型化对象属性
- c# - 在编译时循环遍历类中的所有对象 C#
- grails - 如何在 Grails 中使用自定义身份验证过滤器?
- regex - 如果单词以给定的后缀结尾,则替换所有出现的字母
- php - 插入电源后,PHP SESSION 在 iPad 上死机。铬应用
- java - 在 Ubuntu 中执行 Jmeter 脚本,遇到错误
- javascript - 当我们不知道数据的嵌套级别时,如何在 react/redux 的 reducer 状态属性中更新数据?
- android - firebase 数据库更改时向应用程序用户(android)推送通知?
- qt - 如何不在控制台上打印 Qt 内部消息?