2015-03-02 54 views
2

我有名单的这样一个字典:如何将列表的字典转换为Python中的键和值的元组列表?

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())) 

这样的代码似乎难以阅读,所以我不知道是否有任何Python的方式,或者更准确地说,这是一种在列表理解中做这样的事情?

回答

6

你可以做这样的事情,

>>> 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)] 
0

另一种方法,但不一定更可读或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))]