如何在Python中将一个列表字典转换为键值对元组的列表?

7

我有一个类似这样的字典列表:

y = {'a':[1,2,3], 'b':[4,5], 'c':[6]}

我希望你能将字典转换为元组的列表,每个元素都是一个元组,其中包含字典的一个键和值列表中的一个元素:
x = [
    ('a',1),('a',2),('a',3),
    ('b',4),('b',5),
    ('c',6)
    ]

我的代码如下所示:
x = reduce(lambda p,q:p+q, map(lambda (u,v):[(u,t) for t in v], y.iteritems()))

这样的代码看起来很难读,所以我想知道是否有任何Pythonic方法,更准确地说,是一种列表推导式的方法来做这件事?

2个回答

13

你可以像这样做:

>>> y = {'a':[1,2,3], 'b':[4,5], 'c':[6]}
>>> [(i,x) for i in y for x in y[i]]
[('a', 1), ('a', 2), ('a', 3), ('c', 6), ('b', 4), ('b', 5)]

1

另一种方法,但不一定更易读或符合Python风格:

>>> from itertools import izip_longest
>>> y = {'a':[1,2,3], 'b':[4,5], 'c':[6]}
>>> [tuple(izip_longest(k, v, fillvalue=k)) for k, v in y.items()]
[(('a', 1), ('a', 2), ('a', 3)), (('c', 6),), (('b', 4), ('b', 5))]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接