0

如何编写列表理解来枚举键:值对到 Python 字典中的 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())]

但是,由于默认情况下 dict 是无序的,因此您需要创建 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 回答