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

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

厍书
2023-03-14
问题内容

如果我用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?

问题答案:

密钥的最后一个值获胜。我可以找到的最佳文档在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)



 类似资料:
  • 问题内容: 请清除我对此的疑问,在SQL Server(2000及更高版本)中,主键是自动对群集索引的吗?还是我们可以选择在主键上使用非群集索引? 问题答案: 不,它可以是非集群的。但是,如果您没有明确将其定义为非聚集索引,并且表上没有聚集索引,则会将其创建为聚集索引。

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: MySQL检查表是否存在而不会引发异常 我的项目中有一个动态mysql查询生成器,可从不同的表创建选择查询。 我需要检查当前处理表是否存在。 假设我的表是table1,table2和table3。我的代码是这样的: 我该如何进行检查(请告诉我最简单的方法)。 问题答案: 更新的mysqli版本: 原始mysql版本: 从PHP

  • 问题内容: 如果我运行查询,例如: 即使查询与任何记录都不匹配,它也会始终返回结果吗?还是我需要验证并确保结果返回一行? 问题答案: 是的,因为它是一个聚合并且返回零。除非您添加GROUP BY,否则由于没有组,因此没有结果… 除非您添加GROUP BY,然后没有任何行,否则MAX / SUM等将返回NULL。只有COUNT传回没有结果的数字 编辑,有点晚:SUM会像MAX一样返回NULL 编辑,

  • 问题内容: 我想将其作为事务来执行,因为此键将用作以后操作的“锁”。如果发生这种情况怎么办: 检查它是否存在 确定它不存在 在我确定它不存在时,其他人检查它是否存在 设置它,因为它不存在,然后执行我的操作 第二人称同时设置它,并在不应允许的情况下执行操作。 问题答案: 好吧,如果您想了解Redis交易的性质:http ://redis.io/topics/transactions 特别是,这部分内

  • 问题内容: 因此,我从服务器获取了一些JSON值,但我不知道是否会有特定的字段。 像这样: 有时,还会有一个额外的字段,例如: 我想检查名为“ club”的字段是否存在,以便在解析时不会得到 org.json.JSONException:club的值 问题答案: JSONObject类具有一个名为“ has”的方法: http://developer.android.com/reference/o

  • 我的想法是: 是最好的办法吗?