我有两个清单:
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']
任何人都可以提供帮助。
答案 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)