将多个值添加到字典键

时间:2017-10-24 10:21:45

标签: python list dictionary data-structures

我有两个清单:

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']

任何人都可以提供帮助。

3 个答案:

答案 0 :(得分:3)

使用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']})

答案 1 :(得分:1)

您需要的是按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']}

答案 2 :(得分:0)

由于dicts不能有多个具有相同键的元素,因此分配给dict的该键的较新值将覆盖较旧的值。

因此使用此代码可以:

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)