私はPythonの max 関数を使用して、count
という辞書で最大の整数と、対応するキーを見つけています(正しく言っているかどうかはわかりませんが、私のコードはおそらく説明しています私が説明しているよりもそれ自体が優れています)。辞書count
は{'a': 100, 'b': 210}
の行に沿っています。
number = count[max(count.items(), key=operator.itemgetter(1))[0]]
highest = max(count, key=count.get)
そこに2つの等しい最大値がある場合はどうすればよいですか? {'a': 120, 'b': 120, 'c': 100}
がある場合、これはa
とb
の両方ではなく、最初のものだけを見つけます。
アスタリスクと同じアイデアですが、リストを2回繰り返す必要はありません。もう少し冗長です。
count = { 'a': 120, 'b': 120, 'c': 100 }
answers = []
highest = -1
def f(x):
global highest, answers
if count[x] > highest:
highest = count[x]
answers = [x]
Elif count[x] == highest:
answers.append(x)
map(f, count.keys())
print answers
高速シングルパス:
a = { 'a': 120, 'b': 120, 'c': 100 }
z = [0]
while a:
key, value = a.popitem()
if value > z[0]:
z = [value,[key]]
Elif value == z[0]:
z[1].append(key)
print z
#output:
[120, ['a', 'b']]
そして defualtdict の面白い方法:
import collections
b = collections.defaultdict(list)
for key, value in a.iteritems():
b[value].append(key)
print max(b.items())
#output:
(120, ['a', 'b'])
バケットなしでリストを印刷します。使用する :
' '.join(map(str, mylist))
または、より詳細に:
' '.join(str(x) for x in mylist)
最も単純な解決策が最善の場合もあります。
max_value = 0
max_keys = []
for k, v in count.items():
if v >= max_value:
if v > max_value:
max_value = v
max_keys = [k]
else:
max_keys.append(k)
print max_keys
上記のコードは、次のような2パスソリューションよりもわずかに高速です。
highest = max(count.values())
print [k for k,v in count.items() if v == highest]
もちろんもっと長いですが、その一方で、それは非常に明確で読みやすいです。
これは方法かもしれません(おそらく最も効率的ではありません)。
value = max(count.values())
filter(lambda key: count[key]==value,count)