首页 > 解决方案 > 如何合并这个字典列表?

问题描述

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
}]

标签: python-3.x

解决方案


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']}]

推荐阅读