簡體   English   中英

如何將字典列表轉換為Python中的列表字典?

[英]How do I convert a list of dictionaries to a dictionary of lists in Python?

它可能是Python中的經典問題,但我還沒有找到答案。

我有一個詞典列表,這些詞典有類似的鍵。 它看起來像這樣:

 [{0: myech.MatchingResponse at 0x10d6f7fd0, 
   3: myech.MatchingResponse at 0x10d9886d0,
   6: myech.MatchingResponse at 0x10d6f7d90,
   9: myech.MatchingResponse at 0x10d988ad0},
  {0: myech.MatchingResponse at 0x10d6f7b10,
   3: myech.MatchingResponse at 0x10d6f7f90>}]

我希望得到一個以[0,3,6,9]為鍵的新詞典,並將“myech.MatchingResponse”列表作為值。

當然,我可以使用一個簡單的循環來做到這一點,但我想知道是否有更有效的解決方案。

import collections

result = collections.defaultdict(list)

for d in dictionaries:
    for k, v in d.items():
        result[k].append(v)

假設您的列表被分配給一個名為mylist的變量。

mydic = {}
for dic in mylist:
    for key, value in dic.items():
        if key in mydic:
            mydic[key].append(value)
        else:
            mydic[key] = [value]

也可以用dict理解來做到這一點......可能是一行,但為了清晰起見,我把它保留為兩行。 :)

from itertools import chain

all_keys = set(chain(*[x.keys() for x in dd]))
print {k : [d[k] for d in dd if k in d] for k in all_keys}

結果是:

{0: ['a', 'x'], 9: ['d'], 3: ['b', 'y'], 6: ['c']}

如果你有一個字典列表,每個字典都有相同的鍵,你可以將它們轉換為列表字典,如下例所示(有些人會考慮比其他答案更pythonic)。

d = []
d.append({'a':1,'b':2})
d.append({'a':4,'b':3}) 
print(d)                                                               
[{'a': 1, 'b': 2}, {'a': 4, 'b': 3}]

newdict = {}
for k,v in d[0].items():
    newdict[k] = [x[k] for x in d]

print(newdict)
{'a': [1, 4], 'b': [2, 3]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM