2012-05-16 61 views
2

我有一個元組的名單,說:Python列表:通過獨特的元素組織起來,一本字典

list_of_tuples = [('a', 1),('b',2),('c',1),('a',2),('d',3)] 

我需要得到correspoding值元組中的任何(唯一的)第二個元素。例如作爲字典。 輸出:

dict = {1:['a','c'],2:['b','a'],3:['d']} 

什麼是最pythonic的做法呢?幫助很多appriciated!

回答

4

我大概有defaultdict像jamylak去,但如果你想有一個「真實」的字典,你可以使用setdefault()

>>> list_of_tuples = [('a', 1),('b',2),('c',1),('a',2),('d',3)] 
>>> d = {} 
>>> for item in list_of_tuples: 
...  d.setdefault(item[1],[]).append(item[0]) 
... 
>>> d 
{1: ['a', 'c'], 2: ['b', 'a'], 3: ['d']} 
3
>>> from collections import defaultdict 
>>> list_of_tuples = [('a', 1),('b',2),('c',1),('a',2),('d',3)] 
>>> d = defaultdict(list) 
>>> for c,num in list_of_tuples: 
     d[num].append(c) 


>>> d 
defaultdict(<type 'list'>, {1: ['a', 'c'], 2: ['b', 'a'], 3: ['d']}) 
+4

'defaultdict'主要是有用的,當默認爲貴構建;這不是空列表的情況 - 可能更適合使用正常的字典並且執行'd.setdefault(num,[])。append(c)'。 – lvc

+0

'defaultdict'在我看來更具可讀性。 – jamylak

+1

@Ivc:可能是這樣,但除非性能真的是一個相關的問題,否則我覺得defaultdicts更容易理解。 –

相關問題