【问题标题】:Join N dictionaries in one将 N 个字典合二为一
【发布时间】:2021-03-25 03:56:07
【问题描述】:

我正在尝试以这种方式加入字典:

d1 = {1: [1, 2, 3], 2: [5, 4, 35]}
d2 = {1: [4, 5, 6], 2: [32, 54, 102]}
d3 = {3: [943, 23, 111, 3], 1: [7, 8, 9]}

dictionary_result = {1: [1, 2, 3, 4, 5, 6, 7, 8, 9], 2: [5, 4, 35, 32, 54, 102], 3: [943, 23, 111,3]}

我试过了,但只适用于 2 个字典

from collections import defaultdict
a, b = {1: [2, 3], 2: [3]}, {1: [4], 3: [1]}
de = defaultdict(list, a)
for i, j in b.items():
    de[i].extend(j)

那么,我怎样才能有效地加入这样的 N 个字典呢?

【问题讨论】:

标签: python dictionary


【解决方案1】:

您可以使用字典方法setdefault
这就是setdefault 的工作方式:如果键在字典中,则返回其值,否则插入一个值为默认值的键(在本例中为list)并返回默认值。

dictionary_result = {}
for d in d1, d2, d3:
    for key, value in d.items():
        dictionary_result.setdefault(key, []).extend(value)

输出:

{1: [1, 2, 3, 4, 5, 6, 7, 8, 9], 2: [5, 4, 35, 32, 54, 102], 3: [943, 23, 111, 3]}

【讨论】:

    【解决方案2】:

    添加一个外部循环,它在不同的dicts 上运行以用作更新:

    result = defaultdict(list)
    for d in d1, d2, d3:
        for i, j in d.items():
            result[i].extend(j)
    

    【讨论】:

    • 没有理由区别对待d1;只需从空的defaultdict(list) 开始。目前的工作方式是,您正在改变d1 中的列表,这可能是不可取的。
    • @kaya3 它避免了循环,所以性能更好
    • 您认为defaultdict(list, d1) 如何避免循环遍历d1
    • @kaya3 真的不知道实现是怎样的,我猜它不会遍历字典,而是直接使用它或smth
    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多