Python:为什么字典类型数据会自动排除某些项?

3
我创建了一个包含以下六个条目的字典:
 >>> dict1 = {
'A': ['A','A'],
'AB':['A','B'], 
'A':['A','O'],
'B':['B','B'],
'B':['B','O'],
'O':['O','O']
}

但是当我查字典时,我发现项 "{'A': ['A', 'A'], 'B': ['B', 'B']}" 已被排除。

>>> dict1
Out[19]: {'A': ['A', 'O'], 'AB': ['A', 'B'], 'B': ['B', 'O'], 'O': ['O', 'O']}
>>> len(dict1)
Out[17]: 4

然而,如果我创建一个排除了这些项的新字典,它就会变得正常。
>>> dict2 ={'A': ['A', 'A'], 'B': ['B', 'B']}
>>> dict2
Out[21]: {'A': ['A', 'A'], 'B': ['B', 'B']}

有人能解释一下这是为什么吗?


2
在Python字典中,您不能有重复的键,因此Python会自动用新值替换第一个值。 - Xatyrian
1
我发布了一个答案,展示了如何将许多值分配给特定的键。 - seralouk
4个回答

3

你不能有重复的键,但可以有多个值。换句话说,每个键都是唯一的。

因此,每次为相同的键分配新值时,你会覆盖该键的先前值。

赋予2个值(或列表)的方法,如你的示例所示,可以采用以下方式:

dict1 = {'A': [['A','A'],['A','O']], 'B':[['B','B'],['B','O']], 'O':['O','O'], 'AB':['A','B']}

结果

{'A': [['A', 'A'], ['A', 'O']], 'B': [['B', 'B'], ['B', 'O']], 'AB': ['A', 'B'], 'O': ['O', 'O']}

最后,您可以按以下方式访问每个键:

dict1['A']

结果

[['A', 'A'], ['A', 'O']]

看起来这就是您想要做的。

希望对您有所帮助。


1
在Python中,字典的特点是每个键都是唯一的。也就是说,当您添加一个已存在的条目时,先前存储的值将被新值覆盖。
当您输入以下内容时:
dict1 = {
  'A': ['A','A'],
  'AB':['A','B'], 
  'A':['A','O'], # Overrides ['A', 'A']
  'B':['B','B'],
  'B':['B','O'], # Overrides previous entry
  'O':['O','O']
}

你为键'A'和'B'给了字典两个值。也就是说,你要求字典更改之前存储的值。
我希望我的回答足够清晰 :)
编辑:格式和语言

1
在Python字典中,不能有重复的键。如果任何重复的键存在于Python字典中,Python会自动用新值替换第一个值。Python字典表现为唯一键。
在您的示例中:
dict1 = {
  'A': ['A','A'],
  'AB':['A','B'], 
  'A':['A','O'], # 'A': ['A','A'] and 'A': ['A','O'] override.
  'B':['B','B'],
  'B':['B','O'], # 'B': ['B','B'] and 'B': ['B','O'] override.
  'O':['O','O']
}

然后你的 dictionary 就会是:
dict1 = {
  'A': ['A','O'],
  'AB':['A','B'], 
  'B':['B','O'],
  'O':['O','O']
}

我认为,这会很有帮助。


1

根据Python文档所述

最好将字典视为一组无序的键值对,其中键必须唯一(在一个字典内)。 一对大括号创建一个空字典:{}。 将逗号分隔的键值对列表放置在大括号中会向字典添加初始键值对; 这也是字典在输出时的写法。

字典上的主要操作是使用某个键存储值并提取给定键的值。 也可以使用del删除键值对。 如果您使用已经正在使用的键进行存储,则与该键关联的旧值将被忘记。 使用不存在的键提取值是错误的。

参考资料: https://docs.python.org/3/tutorial/datastructures.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接