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

在python中合并字典值列表

岳正阳
2023-03-14
问题内容

我正在尝试合并三个具有相同键,值列表或单个值的字典。

one={'a': [1, 2], 'c': [5, 6], 'b': [3, 4]}
two={'a': [2.4, 3.4], 'c': [5.6, 7.6], 'b': [3.5, 4.5]}
three={'a': 1.2, 'c': 3.4, 'b': 2.3}

我需要将值中的所有项目添加到一个列表中。

result={'a': [1, 2, 2.4, 3.4, 1.2], 'c': [5, 6, 5.6, 7.6, 2.3], 'b': [3, 4, 3.5, 4.5, 3.4]}

我尝试了几种方法,但是大多数方法将值放入嵌套列表中。例如

out=dict((k, [one[k], two.get(k), three.get(k)]) for k in one)
{'a': [[1, 2], [2.4, 3.4], 1.2], 'c': [[5, 6], [5.6, 7.6], 3.4], 'b': [[3, 4], [3.5, 4.5], 2.3]}

我尝试通过遍历值来更新它:

out.update((k, [x for x in v]) for k,v in out.iteritems())

但结果完全一样。我试图简单地添加列表,但是由于第三个字典只有一个浮点数,所以我做不到。

check=dict((k, [one[k]+two[k]+three[k]]) for k in one)

因此,我尝试首先以1和2的值添加列表,然后附加3的值。添加列表效果很好,但是当我尝试从第三个字典中添加浮点数时,突然整个值都变成了“无”

check=dict((k, [one[k]+two[k]]) for k in one)
{'a': [[1, 2, 2.4, 3.4]], 'c': [[5, 6, 5.6, 7.6]], 'b': [[3, 4, 3.5, 4.5]]}
new=dict((k, v.append(three[k])) for k,v in check.items())
{'a': None, 'c': None, 'b': None}

问题答案:

作为单行代码,具有字典理解能力:

new = {key: value + two[key] + [three[key]] for key, value in one.iteritems()}

这将创建新列表,将from中的列表与fromone中的相应列表进行连接two,将单个值three放入临时列表中以使连接更容易。

或使用就地for更新的循环one

for key, value in one.iteritems():
    value.extend(two[key])
    value.append(three[key])

这用于使用的list.extend()列表就地更新原始列表two,并list.append()添加的单个值three

您出问题的地方:

  • 您的第一次尝试将使用中的值创建一个新列表onetwo并将其three嵌套在其中,而不是将现有列表串联在一起。您尝试清除它只是复制了这些嵌套列表。

  • 您的第二次尝试不起作用,因为in中的值three不是列表,因此无法串联。我为该值创建了一个新列表。

  • 您最后一次尝试不应该list.append()在生成器表达式中使用,因为您存储的是该方法的 返回值 ,该值始终是None(其更改v直接存储在该列表中,并且列表无需再次返回)。

第一种方法的演示:

>>> one={'a': [1, 2], 'c': [5, 6], 'b': [3, 4]}
>>> two={'a': [2.4, 3.4], 'c': [5.6, 7.6], 'b': [3.5, 4.5]}
>>> three={'a': 1.2, 'c': 3.4, 'b': 2.3}
>>> {key: value + two[key] + [three[key]] for key, value in one.iteritems()}
{'a': [1, 2, 2.4, 3.4, 1.2], 'c': [5, 6, 5.6, 7.6, 3.4], 'b': [3, 4, 3.5, 4.5, 2.3]}


 类似资料:
  • 本文向大家介绍Python合并字典,包括了Python合并字典的使用技巧和注意事项,需要的朋友参考一下 示例 考虑以下字典: Python 3.5+ 如本示例所示,重复的键映射到它们的最后一个值(例如,“ Clifford”覆盖“ Nemo”)。 Python 3.3以上 使用此技术,给定键的最前值优先,而不是最后一个(“ Clifford”被抛弃,取而代之的是“ Nemo”)。 Python 2

  • 问题内容: 我目前正在使用ansible来安装PHP,并且在合并字典时遇到了一些困难。我尝试了几种方法来做到这一点,但是我无法像我想要的那样使它工作: 有没有办法合并两个字典,所以我可以将其与“ with_dict”一起使用? 问题答案: 在Ansible 2.0中,为此有一个Jinja过滤器:

  • 问题内容: 带有字典列表,例如: 将它们组合到以下词典列表中的最佳方法是什么: 还是最好以其他方式存储数据,例如: 谢谢你的帮助。 问题答案: 这是一个可能的解决方案: 产生: 如您所见,我使用字典(“合并”)作为中途点。当然,您可以通过以不同的方式存储数据来跳过步骤,但这还取决于这些变量可能具有的其他用途。 祝一切顺利。

  • 我想更改字典的纬度和经度值。 它正在抛出以下错误消息: 对于此它在targetWaypoints内打印一个完整的字典。我想打印纬度值。 提前谢谢。

  • 问题内容: 我了解这将合并词典。但是,它独特吗?如果d1与d2具有相同的密钥但值不同怎么办?我希望将d1和d2合并,但是如果有重复的键,则d1具有优先权。 问题答案: 如果您不再需要原始方法,则可以使用该方法: 使用其他键/值对更新字典, 覆盖现有键 。返回。 例如: 更新: 当然,您可以先复制该词典以创建一个新的合并词典。这可能是必需的,也可能不是。如果您的词典中有复合对象(包含其他对象的对象,

  • 问题内容: 我有以下格式的词典列表: 我想将此字典列表分组为一个字典,例如: 我目前所做的是,遍历所有字典并创建键列表,然后再次遍历该键以创建。我想知道是否有更简单的方法来完成此任务。有人可以帮忙吗? 问题答案: 谷歌的事情: python列表理解 python dict理解 蟒蛇星 python dict获取 python设置联合