簡體   English   中英

將多個值添加到字典鍵

[英]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.

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