我创建了一个包含六个项目的字典,如下所示:
database
但是当我检查字典时,我发现项目 >>> 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
有人可以解释我为什么会这样吗?
答案 0 :(得分: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 :(得分: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'
提供了两个值。那就是你要求dict 更改以前存储的值。
我希望我的回答足够清楚:)
编辑:格式&amp;语言
答案 2 :(得分:1)
在python dictionary
中,您不能拥有重复的密钥。如果python dictionary
中存在任何重复键,则python
会自动将新值替换为第一个值。 python dictionary
表现为unique
密钥。
在你的例子中:
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']
}
我认为,这会有所帮助。
答案 3 :(得分:1)
正如Python文档所说
最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}。在括号内放置以逗号分隔的键:值对列表,将初始键:值对添加到字典中;这也是字典在输出上的写法。
字典上的主要操作是使用某个键存储值并提取给定键的值。也可以删除带有del的键:值对。如果使用已在使用的密钥进行存储,则会忘记与该密钥关联的旧值。使用不存在的密钥提取值是错误的。