【问题标题】:When trying to create a dictionary from two lists, some elements are lost [duplicate]尝试从两个列表创建字典时,某些元素会丢失 [重复]
【发布时间】:2018-09-13 17:54:23
【问题描述】:

我有两个列表:

list_1 = ['2', '1', '1', '2', '1', '2', '1', '5', '4', '3', '2', '1', '3', '2', '1']
list_2 = ['az', 'z', 'c', 'bo', 'o', 'bo', 'o', 'beggh', 'eggh', 'ggh', 'gh', 'h', 'akl', 'kl', 'l']

两个列表中的字符串数量相同。我想从这两个列表中创建一个字典,所以我尝试:

new_dict = dict(zip(list_1, list_2))

我希望是这样的:

{
  '2' : 'az',
  '1' : 'z',
  '1' : 'c',
  ....


}

我还希望字典中键值对的数量与 list_1 或 list_2 中的字符串数量相同。但是,当我尝试将字典打印出来时,它会给出:

{'2': 'kl', '1': 'l', '5': 'beggh', '4': 'eggh', '3': 'akl'}

键值对的数量只有5个,明显少于list_1或list_2中的字符串数量。出了什么问题?

【问题讨论】:

  • 字典中不能有重复的键。如果您不想丢失数据,您可能需要一个列表字典
  • 字典键必须是唯一的,这是字典的一部分。
  • 正如@user3483203 所说,您不能拥有重复的密钥。如果您需要将这些值配对,请创建一个元组列表或列表列表。
  • 这样的事情存在字典理解吗?
  • 字典理解不会优雅地处理重复键。

标签: python python-3.x list dictionary


【解决方案1】:

你不能有一个带有重复键的字典,一种解决方案是按键对值进行分组,这里是一个使用 itertools.groupby 的示例

from itertools import groupby
list_1 = ['2', '1', '1', '2', '1', '2', '1', '5', '4', '3', '2', '1', '3', '2', '1']
list_2 = ['az', 'z', 'c', 'bo', 'o', 'bo', 'o', 'beggh', 'eggh', 'ggh', 'gh', 'h', 'akl', 'kl', 'l']

new_dict = {
    k : list(map(lambda x: x[1], v)) for k, v in groupby(sorted(zip(list_1, list_2)), key=lambda x: x[0])
}
print(new_dict)

Live example

或者干脆使用defaultdict

from collections import defaultdict
new_dict = defaultdict(list)
for k, v in zip(list_1, list_2):
    new_dict[k].append(v)

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2017-04-27
    相关资源
    最近更新 更多