字典中的插入顺序和重复键

时间:2018-10-11 14:34:49

标签: python

我正在使用python 3.7。 我有这样的字典。

dict = { 'a' :2 , 'a' :1 , 'b':3 , 'c':4}
print(dict) 
O/P ={'a' : 1 , 'b' :2 , 'c':3 }

现在在python 3.7中,字典必须保持插入顺序。因此预期的o / p将为{'a':2,'b':3,'c':4},但是('a',2)正在从字典中删除,而不是('a',1)。为什么会发生这种情况?是否有删除python中重复键的规则?

3 个答案:

答案 0 :(得分:1)

来自Python文档:

  

对字典的主要操作是用一个键存储一个值并提取给定键的值。也可以删除带有del的key:value对。如果使用已在使用的密钥进行存储,则与该密钥关联的旧值将被忘记。使用不存在的键提取值是错误的。

请参阅:https://docs.python.org/3/tutorial/datastructures.html

答案 1 :(得分:1)

维护插入顺序与不同键有关:

>>> dct = {'a': 1, 'b': 2}  # do NOT shadow built-in name 'dict'
>>> print(dct)
{'a': 1, 'b': 2}
# and not
{'b': 2, 'a': 1}  # which was totally possible before Python3.6

当收到相同键的多个值时,提供的最后一个将获胜:

>>> dct = {'a': 3, 'a': 1, 'b': 2}
>>> print(dct)
{'a': 1, 'b': 2}

这类似于以下情况:

>>> dct = {}
>>> dct['a'] = 3
>>> dct['a'] = 1
>>> dct['b'] = 2

由于“插入顺序”,您希望dct['a']现在变成3吗?当然不是!

答案 2 :(得分:0)

分配给键的值可以是任何值,甚至可以重复,因为它仅仅是一个值。但是,键类似于变量名。与许多编程语言一样,如果在相同的作用域或方法中再次使用变量名,则第一个变量及其值将被第二个变量覆盖,因为它是最新的变量。

在这种情况下,如果您愿意的话,将不同的键(将键视为标识符)分配给相同的值可能更合适。像这样

dict = { 2: 'a', 1: 'a', 3:'b', 4:'c'} 
print(dict)
O/P = {1: 'a', 2: 'a', 3: 'b', 4: 'c'}