【问题标题】:Converting two lists to one dictionary WITHOUT losing order in Python将两个列表转换为一个字典而不丢失 Python 中的顺序
【发布时间】:2015-01-27 23:31:27
【问题描述】:

我有以下问题。 我有以下两个列表:

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' 等等。

【问题讨论】:

  • 1) 字典没有顺序 2) 停止使用 Python 关键字并将名称作为变量名
  • 字典根据定义是无序的。集合模块中有一个 OrderedDict 类。
  • 您的代码将E 映射到Z 的原因是您将参数传递给zip 的顺序不正确。

标签: python list dictionary


【解决方案1】:

你只是倒着做。你想要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'

【讨论】:

  • 这给了我 E:Q 而我需要 Q:E,即我需要: letter_map["Q"] 来返回 'E'
  • 也许我只需要把列表倒过来
  • @Aribas:您的原始代码就是这样做的!看看你发布的例子——它包含'Q': 'E'
【解决方案2】:

如果使用列表而不是字典来存储对呢?

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

【讨论】:

  • 是的,这绝对是一个解决方案,但我需要一本字典。
【解决方案3】:
d = {}

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

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

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多