簡體   English   中英

從Python中的字典列表創建列表字典

[英]Create Dictionary Of Lists from List of Dictionaries in Python

我有以下詞典列表。

[{'a' : 1, 'b' : 2, 'c' : 2},
 {'a' : 2, 'b' : 3, 'c' : 3},
 {'a' : 3, 'b' : 5, 'c' : 6},
 {'a' : 4, 'b' : 7, 'c' : 8},
 {'a' : 1, 'b' : 8, 'c' : 9},
 {'a' : 2, 'b' : 0, 'c' : 0},
 {'a' : 5, 'b' : 1, 'c' : 3},
 {'a' : 7, 'b' : 4, 'c' : 5}]

我想從上面的列表創建一個列表字典,如下所示。

{1 : [{'a' : 1, 'b' : 2, 'c' : 2}, {'a' : 1, 'b' : 8, 'c' : 9}]
 2 : [{'a' : 2, 'b' : 3, 'c' : 3}, {'a' : 2, 'b' : 0, 'c' : 0}]
 3 : [{'a' : 3, 'b' : 5, 'c' : 6}]
 4 : [{'a' : 4, 'b' : 7, 'c' : 8}]
 5 : [{'a' : 5, 'b' : 1, 'c' : 3}]
 7 : [{'a' : 7, 'b' : 4, 'c' : 5}]

基本上,我想選擇字典中的一個鍵說'a',然后用該鍵的值(1、2、3、4、5、7)創建新的字典,作為要創建的新字典的鍵和值對於新字典,應該是包含該值作為鍵“ a”的值的所有詞典的列表。

我知道最簡單的方法是遍歷列表並構建所需的字典。 我很好奇,還有另一種方法可以做到這一點。

一個collections.defaultdict將是最有效的:

from collections import defaultdict

l = [{'a': 1, 'b': 2, 'c': 2},
 {'a': 2, 'b': 3, 'c': 3},
 {'a': 3, 'b': 5, 'c': 6},
 {'a': 4, 'b': 7, 'c': 8},
 {'a': 1, 'b': 8, 'c': 9},
 {'a': 2, 'b': 0, 'c': 0},
 {'a': 5, 'b': 1, 'c': 3},
 {'a': 7, 'b': 4, 'c': 5}]

dct = defaultdict(list)

for d in l:
    dct[d["a"]].append(d)

from pprint import pprint as pp
pp(dict(dct))

輸出:

{1: [{'a': 1, 'b': 2, 'c': 2}, {'a': 1, 'b': 8, 'c': 9}],
 2: [{'a': 2, 'b': 3, 'c': 3}, {'a': 2, 'b': 0, 'c': 0}],
 3: [{'a': 3, 'b': 5, 'c': 6}],
 4: [{'a': 4, 'b': 7, 'c': 8}],
 5: [{'a': 5, 'b': 1, 'c': 3}],
 7: [{'a': 7, 'b': 4, 'c': 5}]}

可以使用帶有setdefault方法的普通字典

碼:

data=[{'a' : 1, 'b' : 2, 'c' : 2},
{'a' : 2, 'b' : 3, 'c' : 3},
{'a' : 3, 'b' : 5, 'c' : 6},
{'a' : 4, 'b' : 7, 'c' : 8},
{'a' : 1, 'b' : 8, 'c' : 9},
{'a' : 2, 'b' : 0, 'c' : 0},
{'a' : 5, 'b' : 1, 'c' : 3},
{'a' : 7, 'b' : 4, 'c' : 5}]

dictionary_list={}
for row in data:
    dictionary_list.setdefault(row["a"],[]).append(row)
print dictionary_list

輸出:

{1: [{'a': 1, 'c': 2, 'b': 2}, {'a': 1, 'c': 9, 'b': 8}],
2: [{'a': 2, 'c': 3, 'b': 3}, {'a': 2, 'c': 0, 'b': 0}],
3: [{'a': 3, 'c': 6, 'b': 5}],
4: [{'a': 4, 'c': 8, 'b': 7}],
5: [{'a': 5, 'c': 3, 'b': 1}],
7: [{'a': 7, 'c': 5, 'b': 4}]}

您可以按照以下方式進行

mylist = [
   {'a' : 1, 'b' : 2, 'c' : 2},
   {'a' : 2, 'b' : 3, 'c' : 3},
   {'a' : 3, 'b' : 5, 'c' : 6},
   {'a' : 4, 'b' : 7, 'c' : 8},
   {'a' : 1, 'b' : 8, 'c' : 9},
   {'a' : 2, 'b' : 0, 'c' : 0},
   {'a' : 5, 'b' : 1, 'c' : 3},
   {'a' : 7, 'b' : 4, 'c' : 5}
]

def get_dict(mylist, required_key):
    result_dict = {}

    for mydict in mylist:
        result_dict.setdefault(mydict[required_key], [])
        result_dict[mydict[required_key]].append(mydict)

    return result_dict

result_dict = get_dict(mylist, required_key = 'a')
print(result_dict)

暫無
暫無

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

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