2014-08-30 149 views
0

我有什么似乎是一个棘手的问题,但可能很简单的解决方案。在Python中嵌套的字典嵌套的列表

我有一个嵌套列表,我希望每个列表中包含的第一个值是字典中的键。我希望将该列表中包含的所有其他元素作为值添加到该密钥中。

这里是嵌套列表的一个示例:

stations[[1, 'carnegie', 12345, 30],[2, 'london', 12344, 30], [4, 'berlin', 1345563, 30]] 

我想将其转换为一个字典的格式如下:

stations {1:['carnegie', 12345, 30], 2:['london', 12344, 30], 4:['berlin', 1345563, 30]} 

嵌套列表是相当大的,所以我我只作为样本在这里:)

我目前的尝试已经产生了最好的选择为:

newDict = dict.fromkeys(stations,{}) 

这给了我:

{1: {}, 2:{}, 4:{}} 

为了这,我不知如何到两个键和值相结合,使我的理想的字典。

对此的任何帮助将是伟大的。

编辑:

要增加,我希望能够给一个变量名分配到字典与当前的解决方案提供如下:

{i[0] : i[1:] for i in stations} 

这给我正确的在一个循环的输出,但是当我在循环变量赋值给它,它给了我最终的关键:值字典中的

newDict = {} 
for y in stations: 
    newDict = {y[0] : y[1:]} 

print newDict 

回报:

{4: ['berlin', 1345563, 30]} 

谢谢!

回答

2
>>> stations = [[1, 'carnegie', 12345, 30],[2, 'london', 12344, 30], [4, 'berlin', 1345563, 30]] 

您可以使用dict理解

>>> {i[0] : i[1:] for i in stations} 
{1: ['carnegie', 12345, 30], 2: ['london', 12344, 30], 4: ['berlin', 1345563, 30]} 
+0

在Python 3,你可以使用扩展的迭代解包语法,以避免指数和切片,如果你想:'{键:键值,*值在电台}' – Blckknght 2014-08-30 15:50:02

+0

这是做这项工作。但是,当我试图将该循环的结果分配给一个变量时,它只给出了最后一个键和它的元素。即:'print newDict'返回'{4:['berlin',1345563,30]}'有没有办法来解决这个问题? – 2014-08-30 15:58:21

+2

@BenW dict-comp已经*了* a *循环* - 你在循环中所做的一切就是不断创建一个新的字典,每一个回合都有一个单独的条目...拿cyber的代码做:'newDict = {i [0]:我[1:]因为我在电台}' - 那里亚去...全部完成... – 2014-08-30 16:13:34

0

使用dict理解:

{i[0]: i[1:] for i in stations}