2014-01-27 51 views
-1

我有一个简单而又混乱的问题。我有一个需要组织成字典的嵌套数据列表。当我输入代码:字典中的第一个键值对被下一个覆盖

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

我得到{ '一': '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'} 
+4

这对我很好。你确定你没有再次初始化'dict1'吗? – Christian

+0

你在说什么切片? –

+0

我不是再次初始化dict1,我的所有代码都是通过Python 3.3 Shell终端完成的。而@BurhanKhalid,你是对的,我的意思是索引,而不是切片。 – user3239106

回答

0

一个密钥只能在给定字典中出现一次;如果关键字k有两个值,那么d[k]应该是什么都不明确。字典不是键值对的列表,不管它看起来多么像一个。

当分配

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

data[0][3]是一样的关键data[0][1]你分配一个值更早。旧的价值被丢弃并由新的价值取代。

+0

当然,这是有道理的。我想我需要仔细阅读文档,哈哈。谢谢一堆。 – user3239106

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 

运行​​

输出:

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

它作为预计。

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)] 
+0

我把你的代码输入到Shell Terminal中,没有错误。这很奇怪,因为我有自己的嵌套列表,但我仍然收到与我的OP中相同的错误。 我的sys.version信息如下:3.3.3(v3.3.3:c3896275c0f6,2013年11月18日,21:18:40)[MSC v.1600 32位(Intel)]。 – user3239106

+0

@ user3239106所以我想这个错误是你使用Python的方式:) – 0x90

相关问题