当前位置: 首页 > 面试题库 >

使用重复键从2个列表创建字典

闻人宇定
2023-03-14
问题内容

尽管我看到过这样的问题,即从两个列表(一个带有键的列表,另一个带有对应的值)创建了一个字典,但我想从一个列表(包含键)和“
lists”创建一个字典。列表”(包含相应的值)。

我的代码示例是:

#-Creating python dictionary from a list and lists of lists:
keys = [18, 34, 30, 30, 18]
values = [[7,8,9],[4,5,6],[1,2,3],[10,11,12],[13,14,15]]
print "This is example dictionary: "
print dictionary

我期望得到的结果是:

{18:[7,8,9],34:[4,5,6],30:[1,2,3],30:[10,11,12],18:[13,14,15]}

我不需要将重复的键(30、18)与它们各自的值配对。

相反,我不断得到以下结果:

{18: [13, 14, 15], 34: [4, 5, 6], 30: [10, 11, 12]}

此结果缺少了我期望列表中的两个元素。

我希望这个论坛能对您有所帮助。


问题答案:

如前所述,由于字典键必须唯一,因此无法实现所需的输出。

如果您不想丢失数据,则有以下两种选择。

元组列表

res = [(i, j) for i, j in zip(keys, values)]

# [(18, [7, 8, 9]),
#  (34, [4, 5, 6]),
#  (30, [1, 2, 3]),
#  (30, [10, 11, 12]),
#  (18, [13, 14, 15])]

列表字典

from collections import defaultdict

res = defaultdict(list)

for i, j in zip(keys, values):
    res[i].append(j)

# defaultdict(list,
#             {18: [[7, 8, 9], [13, 14, 15]],
#              30: [[1, 2, 3], [10, 11, 12]],
#              34: [[4, 5, 6]]})


 类似资料:
  • 问题内容: 因此,我对以下方面的理解: 当然,问题在于,如果存在多个具有相同值的s,则它们会折叠在一起,最后一个以那个唯一的唯一成员存在。我实际上想将结果字典的值列出: 这种理解是否可能? 问题答案: 您可以将元素一一添加到默认情况下包含空列表的字典中: 您也可以执行非常相似的操作,而不必使用collections模块: 但这可以说是不太清晰。 一个等效的,更清晰的(不需​​要“解析”不太常见的)

  • 我有一个列表,我想创建一个名为的扩展。 我不想覆盖,因此不能使用append、extend或insert。我想知道是否有一个快速的方法来完成这项工作(比使用理解列表或Deep.copy更快)

  • 我有一个带有Person对象的数据库表。我的网络服务接收一个Person对象列表来更新这个Person表。我的应用程序现在包含两个列表: 我想遍历这些列表,并创建一个新列表,用于更新Person表。 fName和lName用于识别现有记录。下面是一个例子。 现在的 乔,布洛格斯,18岁,joe@me.com 简,布洛格斯,21岁,jane@me.com 弗洛,布洛格斯,25岁,flo@me.com

  • 问题内容: 我需要将列表转换成字典,如下所示。奇数元素具有键,偶数元素具有值。 -> 获得相同结果的更好方法? 添加 似乎在工作 问题答案: dict(x[i:i+2] for i in range(0, len(x), 2))

  • 问题内容: 我只想在给定列表中创建 一行 字典。字典的键将是索引,值将是列表的元素。像这样: 输出: 关于我为什么要 一条 线,我没有任何具体要求。我只是在探索python,想知道是否有可能。 问题答案: 将产生 返回一个枚举对象。 sequence 必须是序列, 迭代器 或其他支持迭代的对象。所返回的迭代器的方法返回,其中包含一个计数(从 start开始 ,默认为0)以及从对 序列进行 迭代获得

  • 我有一个数据帧列表。列表中的每个数据帧都是唯一的,这意味着有一些共享但不同的列。我想创建一个dataframe,它包含dataframe列表中的所有列,如果元素不存在,它将填充NaN。我试过以下方法 问题似乎是由于列表中的数据帧造成的。每个数据帧只有一行,因此其索引为零,因此重新编制索引不会起作用。我试过这个: 几乎生成一个随机数作为索引。但是,要获得此错误,请执行以下操作:

  • 如何创建一个列表,其中的值介于我输入的两个值之间?例如,为11到16之间的值生成以下列表:

  • 我有一个列表我想创建一个键是来自列表的键。 然而,我得到了铸造错误。这是固定的,我可以建立一个地图从列表的钥匙?