2013-07-16 5 views
2

У меня есть список Python:Как создать Dict из определенного списка питона

[('Three', 8), ('Nine', 9), ('Two', 4), ('Two', 5), ('One', 0), ('One', 1), ('One', 6)] 

и я хочу создать словарь питона:

{ 'One', [0,1,6], 'Two':[4,5], 'Three':[8], 'Nine':[9] } 

Как я могу сделать это с помощью списка понимания ? Я попытался создать списки с номерами, которые относятся к одному и тому же строковому значению, но я не знаю, как создать список «на лету» в понимании списка.

ответ

6

Просто используйте обычный for цикл:

from collections import defaultdict 

d = defaultdict(list) 

for key, value in your_list: 
    d[key].append(value) 
1

я хотел бы использовать defaultdict, но если вы действительно хотите, чтобы играть с пониманием, вы можете попробовать

{k : [v for kk, v in l if k == kk] for k in set(i for i, _ in l)} 
{'Nine': [9], 'One': [0, 1, 6], 'Three': [8], 'Two': [4, 5]} 

Я бы не рекомендовал его, для повышения эффективности и читаемость.

0
>>> from operator import itemgetter as get 
>>> from itertools import groupby as gb 
>>> l = [('Three', 8), ('Nine', 9), ('Two', 4), ('Two', 5), ('One', 0), ('One', 1), ('One', 6)] 

>>> {k: zip(*list(v))[1] for k,v in gb(sorted(l), get(0))} 
{'Two': (4, 5), 'Nine': (9,), 'Three': (8,), 'One': (0, 1, 6)} 
Смежные вопросы