0

Python 辞書から key: value ペアを 3 メンバーのタプルに列挙するリスト内包表記を作成するにはどうすればよいですか?

d = {'one': 'val1', 'two': 'val2', 'three': 'val3', 'four': 'val4', 'five': 'val5'}

これを試すと:

li = [(index, k, val) for index, k, val in enumerate(d.items())]

私は得るValueError: need more than 2 values to unpack

望ましい出力は次のようになります。

[(0, 'one', 'val1'),
 (1, 'two', 'val2'),
 (2, 'three', 'val3'),
 (3, 'four', 'val4'),
 (4, 'five', 'val5')]
4

2 に答える 2

4

タプルをネストします。ただし、順序は希望どおりではない場合があります。

li = [(index, k, val) for index, (k, val) in enumerate(d.items())]
于 2012-08-08T10:37:44.820 に答える
0

enumerate() の出力は 2 要素のタプルです。そのタプルの値は別の 2 要素タプルであるため、括弧を使用してそれらをグループ化する必要があります。

li = [(index, k, val) for index, (k, val) in enumerate(d.items())]

ただし、辞書はデフォルトでは順序付けされていないため、OrderedDict を作成する必要があります。

odict = collections.OrderedDict()
odict['one'] = 'val1'
odict['two'] = 'val2'
odict['three'] = 'val3'
odict['four'] = 'val4'

li = [(index, k, val) for (index, (k, val)) in enumerate(odict.items())]

これにより、次の値が得られますli

[(0, 'one', 'val1'), (1, 'two', 'val2'), (2, 'three', 'val3'), (3, 'four', 'val4')]
于 2012-08-08T10:45:50.530 に答える