2015-10-15 149 views
0

谢谢你的帮助。 python仍然很新。我相信我不会用这样的问题来滥用SO的善意。我正试图从SQL数据库的思路演变为Python列表/字典方法。Python使用嵌套元组从列表中创建嵌套字典

这里是具有嵌套元组(总是包含三个元件)的列表的一个片段:

List = [(u'32021', u'161', 1696.2), (u'32021', u'162', 452.2), (u'32044', u'148', 599.2), (u'32044', u'149', 212.2)] 

可以这样被转化为具有嵌套的字典的字典,是这样的:

{'32021': ('161': 1696.2, '162': 452.2), '32044': ('148': 599.2, '149': 212.2)} 

我解决了类似的问题,每个元组只使用两个元素:

d = defaultdict(list) 
for k, v in values: 
    d[k].append(v) 

对于三个项目,是一种使用for循环索引的解决方案?

谢谢。

+2

'('161':1696.2,'162':452.2)''不是有效的元组。你的意思是你想要嵌套字典吗? – BrenBarn

+0

@BrenBarn呃,好点。 – rebeling

+0

感谢您纠正代码出现的方式,并推断我的意思是嵌套字典。 – JacamoFinane

回答

0

你可能想这样的:

d = {} 
for k1,k2,v in List: 
    d[(k1,k2)] = v 

,甚至这样的:

d = {(k1,k2):v for k1,k2,v in List} 
+0

这导致了从标准数据库角度来看清楚&逻辑的键,键值对的唯一组合。人们可以很容易地设想通过任一键来总结价值。感谢您保持简单。 – JacamoFinane

0

你可以用一个嵌套defaultdict做这种情况下:

d = defaultdict(lambda:defaultdict(list)) 

for k1, k2, v in values: 
    d[k1][k2].append(v) 

print d['32044']['148'] 
[599.2] 

另请参阅bunch模式,这是一个易于使用的类似的想法,甚至可以让你分配内联属性而不必先声明它们: https://pypi.python.org/pypi/bunch/1.0.1

+0

这实现了我所要求的。我正在研究你的想法。感谢您的帮助。 – JacamoFinane