2017-05-31 54 views
-1

我有两个列表:邮编两个列表字典,而是不断重复的关键

alist = ['key1','key2','key3','key3','key4','key4','key5'] 

blist= [30001,30002,30003,30003,30004,30004,30005] 

我想合并这些列表,并将它们添加到字典中。

我尝试dict(zip(alist,blist))但是这给:

{ 'KEY3':30003, 'KEY2':30002, 'KEY1':30001, 'KEY5':30005, 'KEY4': 30004}

字典的期望形式是:

{ 'KEY1':30001, 'KEY2':30002, 'KEY3':30003, 'KEY3':30003, 'KEY4':30004, 'key4': 30004,'key5':30005}

我想保留字典中的副本以及不加入同一个键中的值(... key3':30003,'key3':30003,...)。是否有可能?

在此先感谢。

+0

你不能做到这一点 – styvane

+0

你不能有相同的名字'key'在'dict' –

+0

所以,更好的主意,与元组入锅 – Antonis

回答

2

您不能这样做,因为dict对象具有唯一键。您应该只是元组的使用列表:

>>> alist = ['key1','key2','key3','key3','key4','key4','key5'] 
>>> blist= [30001,30002,30003,30003,30004,30004,30005] 

>>> zip(alist, blist) 
[('key1', 30001), ('key2', 30002), ('key3', 30003), ('key3', 30003), ('key4', 30004), ('key4', 30004), ('key5', 30005)] 

如果要访问基于密钥的所有值,你可以使用collections.defaultdict为:

>>> from collections import defaultdict 

>>> my_dict = defaultdict(list) 
>>> for k, v in zip(alist, blist): 
...  my_dict[k].append(v) 
... 
>>> my_dict 
defaultdict(<type 'list'>, {'key3': [30003, 30003], 'key2': [30002], 'key1': [30001], 'key5': [30005], 'key4': [30004, 30004]}) 

您可以访问defaultdict类似于普通字典对象。例如:

>>> my_dict['key3'] 
[30003, 30003] 
3

字典使用UNIQUE键,所以其IMPOSIBLE有重复。

1

正如字典只能使用唯一的密钥,如果您插入相同的键两次,最后一个将存储 - 这可能是东西,你可以使用:

from itertools import groupby 

alist = ['key1','key2','key3','key3','key4','key4','key5'] 
alist = [i for i, j in groupby(alist)] 

blist = [30001,30002,30003,30003,30004,30004,30005] 
blist = [list(j) for i, j in groupby(blist)] 

print dict(zip(alist, blist)) 
#{'key3': [30003, 30003], 'key2': [30002], 'key1': [30001], 'key5': [30005], 'key4': [30004, 30004]} 

如果你想保持键顺序为也可以使用OrderedDict:

from collections import OrderedDict 
print OrderedDict(zip(alist, blist)) 
相关问题