如何展开一个列表作为值的Python字典到两个元素的键值元组列表?

问题描述:

我有这样的字典:如何展开一个列表作为值的Python字典到两个元素的键值元组列表?

{'a': [1, 2], 'b': [4, 5, 6]} 

我想知道如何把它展开成像这样的元组的列表:

[('a', 1), ('a', 2), ('b', 4), ('b', 5), ('b', 6)] 

什么是实现这一目标的最佳途径Python 3?

只需使用列表理解:

[(k,vi) for k,v in d.items() for vi in v] 

与样品的输入,这会产生:

>>> d = {'a': [1, 2], 'b': [4, 5, 6]} 
>>> [(k,vi) for k,v in d.items() for vi in v] 
[('a', 1), ('a', 2), ('b', 4), ('b', 5), ('b', 6)] 

注意,在大多数Python版本(不是最新的一个),字典是无序的。因此,密钥的顺序可以在输出方面有所不同(而不是/密钥)。所以[('b', 4), ('b', 5), ('b', 6), ('a', 1), ('a', 2)]也是一个可能的结果。你无法解决这个问题(展开),因为从你构建这样的字典的那一刻起,订单就会丢失。