Ответ 1
Идея - найти максимальное значение и получить все ключи, соответствующие этому значению:
count = {'a': 120, 'b': 120, 'c': 100}
highest = max(count.values())
print([k for k, v in count.items() if v == highest])
Я использую функцию Python max, чтобы найти наибольшее целое число в словаре с именем count
и соответствующий ключ (не совсем уверен, правильно ли я говорю; мой код, вероятно, объясняет себя лучше, чем я объясняю это). Словарь count
похож на {'a': 100, 'b': 210}
и т.д.
number = count[max(count.items(), key=operator.itemgetter(1))[0]]
highest = max(count, key=count.get)
Что бы я сделал, если бы там было два равных по величине значения? Если бы у меня был {'a': 120, 'b': 120, 'c': 100}
, он нашел бы только первое из a
и b
, а не оба.
Идея - найти максимальное значение и получить все ключи, соответствующие этому значению:
count = {'a': 120, 'b': 120, 'c': 100}
highest = max(count.values())
print([k for k, v in count.items() if v == highest])
Та же идея, что и Asterisk, но без повторения в списке дважды. Бит более подробный.
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'])
Это может быть способ (возможно, не самый эффективный).
value = max(count.values())
filter(lambda key: count[key]==value,count)
Иногда самое простое решение может быть лучшим:
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
Код выше немного быстрее, чем два решения:
highest = max(count.values())
print [k for k,v in count.items() if v == highest]
Конечно, это длиннее, но, с другой стороны, это очень понятно и легко читать.
Чтобы распечатать список без ведра. используйте:
' '.join(map(str, mylist))
или, более подробно:
' '.join(str(x) for x in mylist)
Вы можете использовать operator.itemgetter
import operator
count = {'a': 120, 'b': 120, 'c': 100}
max(count.iteritems(), key=operator.itemgetter(1))[0] #python2
max(count.items(), key=operator.itemgetter(1))[0] #python3
Для получения дополнительной информации, пожалуйста, посмотрите Как получить ключ с максимальным значением в словаре?