字典中的第一个键,值对被下一个覆盖

时间:2014-01-27 04:41:51

标签: python python-3.x dictionary indexing

我有一个简单但令人困惑的问题。我有一个嵌套的数据列表,需要组织成一个字典。当我输入代码时:

>>>data = [['a', 1, 'b', 2], ['c', 3, 'd', 4], ['e', 5, 'f', 7]]
>>>dict1 = {}
>>>dict1[data[0][0]] = data[0][1]
>>>dict1
{'a': '1'}

我得到{'a':'1'},正如您所期望的那样。但是,当我尝试将第二个(键,值)对写入我的字典时,第一个条目丢失了。

>>>dict1[data[0][2]] = data[0][3]
>>>dict1
{'b': '2'}

第一个条目去了哪里?通过切片分配键和值似乎只是一个问题。我之后添加的任何键值对都只是添加到字典中。对此有一些解释吗?

修改

奇怪的是,我自己的例子似乎在我的Shell终端中运行良好,但它所代表的实际代码仍然取代了第一个键值对。以下是我遇到问题的代码:

>>>data = [['even', '1', '0', '1', '1', '0', '1'], ['odd', '1', '0', '1', '1', '0',   '1'], ['even', '1', '0', '1', '1', '0', 'x']]
>>> dict1 = {}
>>> dict1[data[0][1]] = data[0][2]
>>> dict1
{'1': '0'}
>>> dict1[data[0][3]] = data[0][4]
>>> dict1
{'1': '1'}

3 个答案:

答案 0 :(得分:0)

创建dict_list.py文件,粘贴以下代码:

data = [['a', 1, 'b', 2], ['c', 3, 'd', 4], ['e', 5, 'f', 7]]
dict1 = {}
dict1[data[0][0]] = data[0][1]
print dict1 # print (dict1) # if python 3.x
dict1[data[0][2]] = data[0][3]
print dict1 # print (dict1) # if python 3.x

运行python dict_list.py

输出:

{'a': 1}
{'a': 1, 'b': 2}

正如预期的那样。

答案 1 :(得分:0)

首先,你让我尝试一下:

>>> data = [['a', 1, 'b', 2], ['c', 3, 'd', 4], ['e', 5, 'f', 7]]
>>> 
>>> dic1={}
>>> dic1[data[0][0]] =  data[0][1]
>>> dic1
{'a': 1}
>>> dic1["333"] = 5
>>> dic1
{'a': 1, '333': 5}
>>> dic1[data[0][2]] = data[0][3]
>>> dic1
{'a': 1, 'b': 2, '333': 5}

正如您所见,它按预期工作,我按照您的确切行动:

>>> dic1 = {}
>>> dic1[data[0][0]] =  data[0][1]
>>> dic1[data[0][2]] = data[0][3]
>>> dic1
{'a': 1, 'b': 2}
>>> 

两者都按预期工作。我猜你曾两次执行dic1 = {},这就是你看到“问题”的原因。除非你的python版本有某种错误,我想你没有。你有什么python版本?

>>> import sys
>>> print sys.version
2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]

答案 2 :(得分:0)

一个键只能在给定的字典中出现一次;如果某个键k有两个值,那么d[k]应该是多么模糊。字典不是键值对的列表,无论它看起来多么像一个。

分配时

dict1[data[0][3]] = data[0][4]

data[0][3]与您之前为其指定值的键data[0][1]相同。旧值将被丢弃并替换为新值。