2012-05-25 24 views
1

昨天,我正在研究一個問題,我想要列出一些非唯一的項目,並從它們中創建一個具有獨特版本的字典列表中的項目映射到每個出現的次數。這聽起來非常直截了當,我立即開始爲它編寫字典理解,只有當我開始意識到我不知道如何完成,因爲我正在運行的鍵不是唯一的,並且值應該是加法的。還是覺得應該有一個典雅的詞典理解這個。想法?如何在非唯一項目列表上使用字典理解

我要的是一個理解的是執行以下操作:

#given 
lst = [1,1,1,7,5,8,3,8,5,9,1] 
#do 
a_dict = defaultdict(int) 
for item in lst: 
    a_dict[item] +=1 
+4

'collections.Counter(lst)'? –

+0

這是完美的,但是還有什麼可以用於Python 2.6的嗎?我在我們的一臺生產機器上停留在2.65上,所以在任何地方都有兼容性會很好。 – Eli

+2

如果您使用的是Python 2.6.5,那麼您將無法使用字典理解功能來完成此操作,因爲它們是在2.7中引入的。請參閱http://www.python.org/dev/peps/pep-0274/。 –

回答

3

Counter class in the collections module看起來可以做你想做的。

你可以做這樣的事情:Python的年齡大於2.7的

from collections import Counter 
a_dict = Counter(lst) 

版本沒有Counter類,但你可以做這樣的事情:

a_dict = dict((x, lst.count(x)) for x in set(lst)) 

set轉換不是必需的。它可能會使代碼運行速度更快,對於包含許多相同項目的大型列表,但我不知道,因爲我沒有對它進行基準測試。

相關問題