2014-04-11 95 views
-1

沒有使用Counter()類,而是一個正常的字典,我怎麼才能找到列表中最常見的元素?沒有使用Counter(),如何在列表中找到最常見的元素?

給定的名單是:

my_list = ['duck', 'duck', 'horse', 'goose', 'bird', 'goose'] 

,我想的輸出是這樣的

most_common: duck, goose 

由此獲得具有相同數量的元素都將出現,如果他們都是最大,然後它們可以作爲一個字符串輸出,而不是他們自己的列表。

+1

應在許多方面可能。你能分享你的想法嗎? – devnull

+0

http://stackoverflow.com/a/22442314/2301450。計數器不是一個函數,它是一個類。 – vaultah

+3

爲什麼你不想使用計數器? –

回答

2

使用正常的字典,收集計數這樣

count_dict = {} 
for item in my_list: 
    count_dict.setdefault(item, 0) 
    count_dict[item] += 1 

再找到這樣

maxi = max(count_dict[item] for item in count_dict) 

最大值現在,它只是找到與speicific元素的事算

print([item for item in count_dict if count_dict[item] == maxi]) 
# ['goose', 'duck'] 

除了使用普通字典外,還可以使用collections.defaultdict以及

from collections import defaultdict 
count_dict = defaultdict(int) 
for item in my_list: 
    count_dict[item] += 1 

其餘的想法是一樣的。

如果你要打印拼接在一起字符串,那麼你可以做

print("Most Common:", ", ".join([item for item in count_dict if count_dict[item] == maxi])) 
# Most Common: duck, goose 
+0

你可以做max(counter,key = lambda x:counter [x])來查找元素。 –

+0

當然,這不會找到所有的最大值。 –

+3

不要叫你的字典'計數器'。它可能會混淆OP。 – devnull

0

首先,它是使用預定義的類名對象,你在你的問題中使用list的壞習慣。

>>> lst = ['duck','duck','horse','goose','bird','goose'] 
>>> temp=set(lst) 
>>> result={} 
>>> for i in temp: 
    result[i]=lst.count(i) 


>>> result 
{'goose': 2, 'horse': 1, 'bird': 1, 'duck': 2} 
>>> 
+0

@NiklasB。謝謝,更新的答案。 – fledgling

相關問題