[英]Add multiple values to a dictionary key
我有兩個清單:
list1 = ['670', '619', '524', '670', '693', '693', '693', '632', '671']
list2 = ['JAIPUR', 'MUMBAI', 'DELHI', 'UDAIPUR', 'GOA', 'GOA', 'GOA', 'LUCKNOW', 'JAIPUR']
我想以此做一本字典。 請注意兩個列表完全按照應映射到的順序排列。 就像鍵“ 670”一樣,我們值“ JAIPUR”,依此類推。
但是當我嘗試時,它的輸出為:
d = dict(zip(list1, list2))
{'670': 'UDAIPUR', '619': 'MUMBAI', '524': 'DELHI', '693': 'GOA', '632': 'LUCKNOW', '671': 'JAIPUR'}
如果為單個鍵找到多個值,則僅采用最新值。 但是我想要的是像670這樣的單個鍵的多個值應具有:
'670': ['JAIPUR', 'UDAIPUR']
誰能幫忙。
使用defaultdict
:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i,key in enumerate(list1):
if list2[i] not in d[key]: #to add only unique values (ex: '693':'goa')
d[key].append(list2[i])
>>> d
=> defaultdict(<class 'list'>, {'670': ['JAIPUR', 'UDAIPUR'], '619': ['MUMBAI'],
'524': ['DELHI'], '693': ['GOA'], '632': ['LUCKNOW'], '671': ['JAIPUR']})
您需要的是按list1
項分組。 使用collections.defaultdict
對象:
import collections
list1 = ['670', '619', '524', '670', '693', '693', '693', '632', '671']
list2 = ['JAIPUR', 'MUMBAI', 'DELHI', 'UDAIPUR', 'GOA', 'GOA', 'GOA', 'LUCKNOW', 'JAIPUR']
result = collections.defaultdict(list)
for t in zip(list1, list2):
result[t[0]].append(t[1])
print(dict(result))
輸出:
{'524': ['DELHI'], '671': ['JAIPUR'], '632': ['LUCKNOW'], '670': ['JAIPUR', 'UDAIPUR'], '619': ['MUMBAI'], '693': ['GOA', 'GOA', 'GOA']}
由於字典使用相同的鍵最多只能有一個元素,因此分配給字典的鍵的新值會覆蓋較舊的值。
因此,使用此代碼即可:
list1 = ['670', '619', '524', '670', '693', '693', '693', '632', '671']
list2 = ['JAIPUR', 'MUMBAI', 'DELHI', 'UDAIPUR', 'GOA', 'GOA', 'GOA', 'LUCKNOW', 'JAIPUR']
def extendDictValue(d, key, value):
if key in d:
d[key].append(value)
else:
d[key] = [value]
d={}
for key, value in zip(list1, list2):
extendDictValue(d, key, value)
print(d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.