2015-10-15 6 views
0

Благодарим за помощь. Еще очень новичок в python. Надеюсь, я не злоупотребляю доброй волей SO такими вопросами. Я пытаюсь перейти от менталитета базы данных SQL к подходу python/dictionary.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 argh, хороший пункт. – 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] 

т.д.

Также см. Раздел., что является простой в использовании аналогичной идеей, которая позволяет даже назначать атрибуты inline без их объявления сначала: https://pypi.python.org/pypi/bunch/1.0.1

+0

Это достигается именно тем, что я просил. Я изучаю обе свои идеи. Спасибо за помощь. – JacamoFinane