2015-10-15 189 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