2016-03-07 62 views
2

我想從具有列表值的字典中獲取元組對的列表。從具有列表值的字典中創建元組對

d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] } 
print(d.items()) 
>>[('a', [1, 2]), ('b', [4, 5]),('c', [7, 8]) ] 

我怎麼名單以這種形式

[('a', 1),('a', 2), ('b',4),('b',5),('c',7),('c',8)] 
+1

可能重複[如何將Python字典轉換爲元組列表?](http://stackoverflow.com/questions/674519/how-can-i-convert- python-dictionary-to-a-list-of-tuples) –

+0

這與此有點不同。這不僅僅是把key:value轉換成元組列表。 – Goodies

回答

2

使用一個簡單的列表理解:

d = {'a': [1,2,3], 'b': [4,5,6]} 
l = [(k, v) for k in d for v in d[k]] 
print(l) # => [('a', 1), ('a', 2), ('a', 3), ('b', 4), ('b', 5), ('b', 6)] 

有可能其他的方法來做到這一點,但這是簡單化和沒有按不需要其他圖書館。

1
>>> d = {'a': [1, 2], 'b': [4, 5], 'c': [7, 8]} 

您可以使用dict.items()訪問密鑰值對。

>>> list(d.items()) 
[('a', [1, 2]), ('c', [7, 8]), ('b', [4, 5])] 

然後你可以遍歷對和遍歷列表值:

>>> [(key, value) for (key, values) in d.items() 
... for value in values] 
[('a', 1), ('a', 2), ('c', 7), ('c', 8), ('b', 4), ('b', 5)] 

字典鍵不按字母順序排序。如果你想在你的問題中精確的輸出,你需要對它們進行排序,無論是後創建列表或之前:

>>> pairs = _ 
>>> sorted(pairs) 
[('a', 1), ('a', 2), ('b', 4), ('b', 5), ('c', 7), ('c', 8)] 
0

其操作簡單,使用一個班輪:)

>>> 
>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] } 
>>> [(key,item) for item in value for key, value in d.iteritems()] 
[('a', 4), ('c', 4), ('b', 4), ('a', 5), ('c', 5), ('b', 5)] 
>>> 

,如果你想排序使用內置功能

>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] } 
>>> sorted([(key,item) for item in value for key, value in d.iteritems()]) 
[('a', 4), ('a', 5), ('b', 4), ('b', 5), ('c', 4), ('c', 5)] 
>>>