我有一个简单但令人困惑的问题。我有一个嵌套的数据列表,需要组织成一个字典。当我输入代码时:
>>>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'}
答案 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]
相同。旧值将被丢弃并替换为新值。