如果密钥存在,则更新字典并附加

man*_*iac 3 python dictionary numpy

我有一份dictionarys列表.

list_of_dicts = [{ a: 1, b:f, c:3}, {a: y, b:q, c:z, d: 1}, ... ] 
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个新的字典,如下所示:

newDict = { a: [1,y], b: [f,q], c: [3,z], d:[1]}
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个双循环,但是这很慢,因为我在字典中处理大对象(主要是NumPy数组).

newDict = {}
for l in list_of_dicts: 
    for k, v in l.items():
        if k in newDict: 
           newDict.append(v)
        else:
           newDict[k] = [v]
Run Code Online (Sandbox Code Playgroud)

怎么做得更快?

Kas*_*mvd 5

使用a collections.defaultdict()将改善性能:

result = defaultdict(list)
for d in list_of_dicts:
    for k, v in d.items():
        result[k].append(v)
Run Code Online (Sandbox Code Playgroud)