沒有使用Counter()
類,而是一個正常的字典,我怎麼才能找到列表中最常見的元素?沒有使用Counter(),如何在列表中找到最常見的元素?
給定的名單是:
my_list = ['duck', 'duck', 'horse', 'goose', 'bird', 'goose']
,我想的輸出是這樣的
most_common: duck, goose
由此獲得具有相同數量的元素都將出現,如果他們都是最大,然後它們可以作爲一個字符串輸出,而不是他們自己的列表。
沒有使用Counter()
類,而是一個正常的字典,我怎麼才能找到列表中最常見的元素?沒有使用Counter(),如何在列表中找到最常見的元素?
給定的名單是:
my_list = ['duck', 'duck', 'horse', 'goose', 'bird', 'goose']
,我想的輸出是這樣的
most_common: duck, goose
由此獲得具有相同數量的元素都將出現,如果他們都是最大,然後它們可以作爲一個字符串輸出,而不是他們自己的列表。
使用正常的字典,收集計數這樣
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
你可以做max(counter,key = lambda x:counter [x])來查找元素。 –
當然,這不會找到所有的最大值。 –
不要叫你的字典'計數器'。它可能會混淆OP。 – devnull
首先,它是使用預定義的類名對象,你在你的問題中使用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}
>>>
@NiklasB。謝謝,更新的答案。 – fledgling
應在許多方面可能。你能分享你的想法嗎? – devnull
http://stackoverflow.com/a/22442314/2301450。計數器不是一個函數,它是一個類。 – vaultah
爲什麼你不想使用計數器? –