2017-12-10 9 views
0

いくつかの文字列を分析し、それらが出現する回数を計算しようとしています。このデータは辞書に格納されます。もしmax関数を使うのであれば、遭遇した最初の最も高い数字だけが出力されます。辞書内に複数の最大値を見つける方法

count = {"cow": 4, "moo": 4, "sheep": 1} 
print(max(count.keys(), key=lambda x: count[x])) 
cow 

これは牛を最大にする。どのように私はdefaultdictとカウントの両方に印刷すること

count = {"cow": 4, "moo": 4, "sheep": 1} 
cow, moo 

答えて

4

なぜそれをシンプルに保つために?

mx = max(count.values()) 
print([k for k, v in count.items() if v == mx]) 
# ['cow', 'moo'] 

2行目における括弧表現はlist comprehension一リスト状物(「反復可能」)上で実行され、それに沿って進むように新しいリストを作成forループに対して本質的に短い手です。この場合の微妙な点は、タプルのアンパックによって値が割り当てられて同時に実行される2つのループ変数(kv)です(.items()がペアを(キー、値)を1つずつ返します)。ここではリスト内包を要約するとほぼ同等である:

result = [] 
for k, v in count.items(): 
    if v == mx: 
     result.append(k) 

しかし、リストの内包はより高速に実行しても、あなたがそれに慣れたら、読みやすくなります。

+0

ありがとうございました! [this](https://stackoverflow.com/questions/12402015/print-the-key-of-the-max-value-in-a-dictionary-the-pythonicway)などの他の投稿を見ていましたが、しかし、彼らは1つ以上の最大値について話すようには見えなかった。申し訳ありません、私はこれに新しいです!印刷機能のコードがどのように機能するか説明できますか? –

+0

@KOOTSHOOTS確かに、答えを更新します。 –

1

ジャスト・グループへの「牛」と「MOO」を取得し、最大かかるだろう:

from collections import defaultdict 

count = {"cow": 4, "moo": 4, "sheep": 1} 

d = defaultdict(list) 
for animal, cnt in count.items(): 
    d[cnt].append(animal) 

print(dict(d)) 
# {4: ['cow', 'moo'], 1: ['sheep']} 

print(max(d.items())[1]) 
# ['cow', 'moo']