簡體   English   中英

Python - 如何從另一個列表創建一個字典列表,該列表具有兩個具有多個值的鍵?

[英]Python - How to create a dictionary list from another list which having two keys with multiple values?

我正在嘗試從另一個列表創建一個字典列表,該列表具有兩個具有多個值的鍵,如下所示:

contact_items = [{'type': ['value1', 'value2', 'value3'],
                 'name': ['john', 'SCANIA', 'MARK']}]

list1 = ''
list2 = ''
list3 = []
test_dict = {}

for item in contact_items:
    list1 = item['type']
    list2 = item['name']

test_dict = {}

for k in list1:
    for l in list2:
        test_dict['type'] = k
        test_dict['name'] = l
        list3.append(test_dict)

print(list3)

上面的代碼沒有按預期返回字典列表。

輸出:

[{'type': 'value3', 'name': 'MARK'}, {'type': 'value3', 'name': 'MARK'}, {'type': 'value3', 'name': 'MARK'}, {'type': 'value3', 'nam
e': 'MARK'}, {'type': 'value3', 'name': 'MARK'}, {'type': 'value3', 'name': 'MARK'}, {'type': 'value3', 'name': 'MARK'}, {'type': 'v
alue3', 'name': 'MARK'}, {'type': 'value3', 'name': 'MARK'}]

預期的:

result=[{'type':'value1','name':'john'},
{'type':'value2','name':'SCANIA'},
{'type':'value3','name':'MARK'}]

您多次將相同的字典放入列表中。 而且您在第一個循環中為相同的變量分配了不同的值。 而且您正在迭代嵌套循環中list1list2中的每個項目組合。

這是一種從您指定的輸入中獲取您指定的結果的方法:

types = contact_items[0]['type']
names = contact_items[0]['name']
list3 = [{'type': t, 'name': n} for (t,n) in zip(types, names)]

列表推導, zip

這是非常微不足道的。 查找列表理解和字典理解。

result = [{"type": contact_items[0]["type"][i], 
"name": contact_items[0]["name"][i]} 
for i in range(len(contact_items[0]["name"])) ]

更整潔。

items = contact_items[0]

result = [{"type": items["type"][i], "name": items["name"][i]} for i in range(len(items["name"]))]
result

您可以將列表理解zip結合使用來實現此目的。

result = [
    {"name": name, "type": type}
    for type, name in zip(*contact_items[0].values())
]

暫無
暫無

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

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