如果有重复的键,python dict理解总是“最后赢”吗

     2023-02-23     156

关键词:

【中文标题】如果有重复的键,python dict理解总是“最后赢”吗【英文标题】:Is a python dict comprehension always "last wins" if there are duplicate keys 【发布时间】:2017-02-02 08:53:55 【问题描述】:

如果我创建一个带有 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?

【问题讨论】:

是的,将添加最后一个值。如果您在理解 new_dict[1] = 111 之外明确地这样做,您会期望 100 还是 111?仅仅因为它在理解中并不会使插入的顺序不同。 永远是最后一个值,就像覆盖前一个一样! iterable 给出的理解的最后一个值将是最后写入的那个。 【参考方案1】:

键的最后一个值获胜。我能找到的最好的文档是Python 3 language reference, section 6.2.7:

与列表和集合推导相比,字典推导需要两个用冒号分隔的表达式,后跟通常的“for”和“if”子句。运行推导式时,生成的键和值元素按照它们产生的顺序插入到新字典中

该文档还明确指出,最后一项在逗号分隔的键值对 (1: 1, 1: 2) 和字典解包 (**1: 1, **1: 2) 中获胜:

如果给出了以逗号分隔的键/数据对序列,...您可以在键/数据列表中多次指定相同的键,该键的最终字典值将是最后一个给出的值。

双星号** 表示字典解包。它的操作数必须是一个映射。每个映射项都添加到新字典中。之后的值替换了之前的键/数据对和之前的字典解包已经设置的值。

注意as wim points out,如果有相同但不同的键,则键的第一个版本获胜:

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

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

【讨论】:

【参考方案2】:

我是否保证最后一项会出现在最终字典中?

不完全是……

在重复键的情况下,第一个键被保留,最后一个值被保留。生成的 item(键、值)可能一开始就不存在于任何原始对中。

>>> 1.0: 1, 1: 1.0
1.0: 1.0

这种行为在Dictionary displays(强调我的)下有所记录:

这意味着您可以在键/数据列表中多次指定同一个键,并且该键的最终字典值将是最后一个

【讨论】:

【参考方案3】:

如果你的意思是像

key: val for (key, val) in pairs

其中pairs 是2 元素列表或元组的有序集合(例如,列表或元组),那么是的,理解将按顺序获取集合,最后一个值将“获胜”。

请注意,如果pairs 是一组pairs,则没有“最后一项”,因此结果不可预测。 示例:

>>> n = 10
>>> pairs = [("a", i) for i in range(n)]
>>> key:val for (key, val) in pairs
'a': 9
>>> key:val for (key, val) in set(pairs)
'a': 2

【讨论】:

python字典的操作总结

...,其实是弹出最底部的,但是字典是无序的查dict[‘key‘]如果没有这个键会报错dict.get(‘key‘)如果没有会返回一个None,但是不会报错,推荐使用dict.setdefault(键,值)如果dict中存在这个键值对就直接返回该值,否在,返回次设置的... 查看详情

用两个列表中的键、值初始化 dict [重复]

】用两个列表中的键、值初始化dict[重复]【英文标题】:initializedictwithkeys,valuesfromtwolist[duplicate]【发布时间】:2011-12-2605:22:27【问题描述】:我已阅读this链接但是我该如何初始化字典呢?说两个列表keys=[\'a\',\'b\',\'c\',\'d\']values=[... 查看详情

Python Tuple to Dict,带有额外的键列表

】PythonTupletoDict,带有额外的键列表【英文标题】:PythonTupletoDict,withadditionallistofkeys【发布时间】:2013-12-3017:00:50【问题描述】:所以我有这个元组数组:[(u\'030944\',u\'20091123\',10,30,0),(u\'030944\',u\'20100226\',10,15,0)]我有这个字段名称... 查看详情

如何使用python在mysql中插入python dict的键和值

】如何使用python在mysql中插入pythondict的键和值【英文标题】:Howtoinsertthekeysandvaluesofpythondictinmysqlusingpython【发布时间】:2012-08-3100:13:13【问题描述】:我有一个这样的pythondict:my_dict=\'find\':[\'http://time.com\',\'http://find.com\'],\'time\':... 查看详情

python之dict(代码片段)

...储的是键值对,即key:value的形式,并且key不能有重复值,如果有重复,后面的值会覆盖前面的;值可以重复#字典的定义dict1="name":"xiaoming","age":18,"sex":"man"print(dict1)结果:‘name‘:‘xiaoming‘,‘age‘:18,‘sex‘:‘man‘V 查看详情

返回最小值的键[重复]

】返回最小值的键[重复]【英文标题】:returnkeyofminimumvalue[duplicate]【发布时间】:2020-05-2419:10:15【问题描述】:我想在Python中返回dictionary中最小值的键。键值对的值会有几个数字,即dict[current]=(total,gone,heuristic)。如何返回最小... 查看详情

从字典中获取最大值[重复]

...净)的方法是什么谢谢【问题讨论】:【参考方案1】:如果您只关心找到最大值,而不关心与其相关的键,那么您只需访问dict的值(尽管链接的帖子Gettingk 查看详情

带有带有整数键的dict的python字符串格式()[重复]

】带有带有整数键的dict的python字符串格式()[重复]【英文标题】:pythonstringformat()withdictwithintegerkeys[duplicate]【发布时间】:2014-01-0718:47:54【问题描述】:我想使用Python字符串的format()来充当快速而肮脏的模板。但是,我想使用... 查看详情

我想从python中的字典字典中制作一个字典[重复]

...,其中包含字典作为其键的值。我想从中创建一个字典,如果有重复的键,它应该添加这些键的值所以我有temp_dict=0:\'a\':1,\'b\':2,1 查看详情

用键打印dict中的最大值[重复]

】用键打印dict中的最大值[重复]【英文标题】:printhighestvalueindictwithkey[duplicate]【发布时间】:2015-01-0809:55:24【问题描述】:我的字典是这样的,\'A\':4,\'B\':10,\'C\':0,\'D\':87我想用它的键找到最大值,用它的键找到最小值。输出会... 查看详情

python - 如何使用列表中的键和Python中的空值初始化dict?

】python-如何使用列表中的键和Python中的空值初始化dict?【英文标题】:HowtoinitializeadictwithkeysfromalistandemptyvalueinPython?【发布时间】:2011-01-1513:27:32【问题描述】:我想从中得到:keys=[1,2,3]到这里:1:None,2:None,3:None有pythonic的方法... 查看详情

dict数据类型

...覆盖之前的重复键print({‘a‘:12,‘b‘:14,‘a‘:18})#赋值,如果键不存在,就新增这个键dic[‘bb‘]=‘666‘#设置默认值,并返回添加的键值print 查看详情

如何在Python中找到字典中的最大值键[重复]

】如何在Python中找到字典中的最大值键[重复]【英文标题】:HowtofindmaximumvaluedkeyindictionaryinPython[duplicate]【发布时间】:2018-09-2700:07:50【问题描述】:我无法理解以下代码如何在字典中找到具有最大值的键。我知道第一个参数,... 查看详情

如何正确更新dict中的dict? (Python)[重复]

】如何正确更新dict中的dict?(Python)[重复]【英文标题】:Howtocorrectlyupdatedictindict?(Python)[duplicate]【发布时间】:2020-03-0121:25:23【问题描述】:我有以下代码:some=stat=\'matches_played\':0,\'won\':0,\'draws\':0,\'loss\':0,\'points\':0some=\'Arsenal... 查看详情

Python中的字典小写

...【参考方案1】:您将需要使用循环或列表/生成器理解。如果你想小写所有的键和值,你可以这样做::dict((k.lower(),v.lower())fork 查看详情

用python操作excel,如何将python中一个dict的键和值分别批量写入excel中不同列

现在有一个dict,键和值分别是学生学号和学生成绩,如何将学生学号写入excel的列A,将学生成绩学到excel的B列参考技术APython对Excel操作详解_百度文库http://wenku.baidu.com/link?url=M0jYRtxaTjf3Bnt_EWeo3eclBmqG19hpWptBmMl2X6XJefxLN3_EMrqK4NRKVXiGs_CRZoW... 查看详情

setdefault函数的用法及个人理解

...etdefault函数的用法及理解dict.setdefault(key,default=None)功能:如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于字典中,将读出该键原来对应的值,default的值不会覆盖原来已经存在的键的值。参... 查看详情

了解 Python 中 defaultdict 的使用 [重复]

】了解Python中defaultdict的使用[重复]【英文标题】:UnderstandingtheuseofdefaultdictinPython[duplicate]【发布时间】:2017-05-1805:27:19【问题描述】:我开始学习Python,并且遇到了一段代码,希望你们中的某个人能帮助我理解。fromcollectionsimpor... 查看详情