将两个列表转换为一个字典而不会在Python中丢失顺序

时间:2015-01-27 23:31:28

标签: python list dictionary

我有以下问题。 我有以下两个清单:

d = ['E', 'T', 'A', 'O', 'I', 'N', 'S', 'H', 'R', 'D', 'L', 'C', 'U', 'M', 'W', 'F','G', 'Y', 'P', 'B', 'V', 'K', 'J', 'X', 'Q', 'Z']

list = ['Q', 'I', 'J', 'K', 'G', 'A', 'T', 'R', 'H', 'S', 'N', 'O', 'X', 'W', 'Z', 'V','B', 'P', 'Y', 'F', 'M', 'U', 'C', 'L', 'D', 'E']

我使用命令:rotation = dict(zip(list,d))来组合这些列表。但是,我得到以下字典:

dict = {'A': 'N', 'C': 'J', 'B': 'G', 'E': 'Z', 'D': 'Q', 'G': 'I', 'F': 'B', 'I': 'T','H': 'R', 'K': 'O', 'J': 'A', 'M': 'V', 'L': 'X', 'O': 'C', 'N': 'L', 'Q': 'E','P': 'Y', 'S': 'D', 'R': 'H', 'U': 'K', 'T': 'S', 'W': 'M', 'V': 'F', 'Y': 'P','X': 'U', 'Z': 'W'}

完全无序。 有没有办法正确组合这两个列表? 我的意思是写信' E' (d的第一个字母)用字母' Q'来映射。 (列表的第一个字母)而不是' Z'。还有' T'用' I'映射等等。

3 个答案:

答案 0 :(得分:3)

你只是倒退了。您想要dict(zip(d, list))(尽管不要将list用作变量名称);你想要(key, value)元组。

In [67]: d = ['E', 'T', 'A', 'O', 'I', 'N', 'S', 'H', 'R', 'D', 'L', 'C', 'U', 'M', 'W', 'F','G', 'Y', 'P', 'B', 'V', 'K', 'J', 'X', 'Q', 'Z']

In [68]: d2 = ['Q', 'I', 'J', 'K', 'G', 'A', 'T', 'R', 'H', 'S', 'N', 'O', 'X', 'W', 'Z', 'V','B', 'P', 'Y', 'F', 'M', 'U', 'C', 'L', 'D', 'E']

In [69]: letter_map = dict(zip(d, d2))

In [70]: letter_map["E"]
Out[70]: 'Q'

In [71]: letter_map["T"]
Out[71]: 'I'

答案 1 :(得分:0)

如何使用列表来存储对而不是字典。

d = ['E', 'T', 'A', 'O', 'I', 'N', 'S', 'H', 'R', 'D', 'L', 'C', 'U', 'M', 'W', 'F','G', 'Y', 'P', 'B', 'V', 'K', 'J', 'X', 'Q', 'Z']
list = ['Q', 'I', 'J', 'K', 'G', 'A', 'T', 'R', 'H', 'S', 'N', 'O', 'X', 'W', 'Z', 'V','B', 'P', 'Y', 'F', 'M', 'U', 'C', 'L', 'D', 'E']
new_list = []
for (dd,l) in zip(d,list):
    i.append((dd,l))
print new

哪个输出

[('E', 'Q'), ('T', 'I'), ('A', 'J'), ('O', 'K'), ('I', 'G'), ('N', 'A'), ('S', 'T'), ('H', 'R'), ('R', 'H'), ('D', 'S'), ('L', 'N'), ('C', 'O'), ('U', 'X'), ('M', 'W'), ('W', 'Z'), ('F', 'V'), ('G', 'B'), ('Y', 'P'), ('P', 'Y'), ('B', 'F'), ('V', 'M'), ('K', 'U'), ('J', 'C'), ('X', 'L'), ('Q', 'D'), ('Z', 'E')]

答案 2 :(得分:0)

d = {}

for i in range(len(list_a)):
    d[list_a[i]] = list_b[i]

其中list_a和list_b是你要合并的两个列表