2014-06-12 61 views
1

我的問題可能有點奇怪,但我不知道該怎麼說。的情況是,我有跟元組的字典作爲鍵:如何從字典中的Python元組鍵中獲取所有值到一個列表中?

{(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'} 

我現在想在字典中的所有元組的值的列表(或元組)。所以結果應該是這樣的:

[1, 2, 3, 4, 5, 6] 

有沒有人知道我該如何以高效和pythonic的方式做到這一點?

歡迎所有提示!

[編輯] 看見我得到一些額外的問題了大量的迴應:

我不關心順序,但可能重複應該被刪除..

回答

6

鏈的鍵一起,與列表理解,例如:

[v for key in yourdict for v in key] 

如果你只需要遍歷,使用itertools.chain.from_iterable()可以這樣做:

from itertools import chain 

for v in chain.from_iterable(yourdict): 

字典沒有排序,因此鍵的值也不會以任何特定順序(儘管每個鍵的2個值保持連續)。您可以隨時對它們進行排序:

sorted(v for key in yourdict for v in key) 

sorted(chain.from_iterable(yourdict)) 

如果你不關心訂單,但不想重複,然後產生一組來代替:

{v for key in yourdict for v in key} 

演示:

>>> yourdict = {(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'} 
>>> [v for key in yourdict for v in key] 
[1, 2, 5, 6, 3, 4] 
>>> from itertools import chain 
>>> list(chain.from_iterable(yourdict)) 
[1, 2, 5, 6, 3, 4] 
>>> sorted(v for key in yourdict for v in key) 
[1, 2, 3, 4, 5, 6] 
>>> sorted(chain.from_iterable(yourdict)) 
[1, 2, 3, 4, 5, 6] 

而產生一組:

>>> anotherdict = {(1, 2): 'a', (3, 4): 'b', (4, 2): 'c'} 
>>> {v for key in yourdict for v in key} 
set([1, 2, 3, 4, 5, 6]) 
>>> {v for key in anotherdict for v in key} 
set([1, 2, 3, 4]) 
2

既然你提到的順序並不重要

d = {(1, 2): 'a', (3, 4): 'b', (5, 6): 'c'} 
set().union(*d.viewkeys()) 
set([1, 2, 3, 4, 5, 6]) 
相關問題