小编典典

如果存在重复的键,python dict理解是否总是“最后获胜”

python

如果我用dict理解创建了一个python字典,但是有重复的键,我是否保证最后一项将是最终字典中的最后一项?从https://www.python.org/dev/peps/pep-0274/看不清楚吗?

new_dict = {k:v for k,v in [(1,100),(2,200),(3,300),(1,111)]}
new_dict[1] #is this guaranteed to be 111, rather than 100?

阅读 178

收藏
2021-01-20

共1个答案

小编典典

密钥的最后一个值获胜。我可以找到的最佳文档在Python
3语言参考的第6.2.7节中

与list和set的理解相反,dict的理解需要两个表达式之间用冒号分隔,后跟通常的“ for”和“ if”子句。运行理解时,将生成的键和值元素
按它们产生的顺序 插入新字典

该文档还明确指出,最后一项对于逗号分隔的键/值对({1: 1, 1: 2})和字典解包({**{1: 1}, **{1: 2}})都是有效的:

如果给出了以逗号分隔的键/基准对序列,则…您可以在键/基准列表中多次指定相同的键,并且该键的最终字典值将是最后给出的值。

双星号**表示 字典解包 。它的操作数必须是一个映射。每个映射项都添加到新词典中。较新的值将替换较早的键/基准对和较早的字典解包已设置的值。

请注意,正如wim所指出的,如果有相同但不同的键,则第一个键的版本将获胜:

>>> {k: v for k, v in [(1, 1), (1.0, 2.0)]}
{1: 2.0}

在这里,最终字典的键来自(1, 1),但值来自(1.0, 2.0)

2021-01-20