2

私はpythonリストを持っています:

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

Python辞書を作成したい:

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

リスト内包表記でこれを行うにはどうすればよいですか? 同じ文字列値に属する数字でリストを作成しようとしましたが、リスト内包表記でオンザフライでリストを作成する方法がわかりません。

4

3 に答える 3

6

通常のforループを使用するだけです:

from collections import defaultdict

d = defaultdict(list)

for key, value in your_list:
    d[key].append(value)
于 2013-07-16T20:58:16.077 に答える
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]}

効率と読みやすさの理由から、お勧めしません。

于 2013-07-16T21:00:40.267 に答える
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)}
于 2013-07-16T21:06:16.813 に答える