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

时间:2017-08-01 09:53:33

标签: python python-3.x dictionary

我创建了一个包含六个项目的字典,如下所示:

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

有人可以解释我为什么会这样吗?

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的键:值对。如果使用已在使用的密钥进行存储,则会忘记与该密钥关联的旧值。使用不存在的密钥提取值是错误的。

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