Подтвердить что ты не робот

Использование Python max для возврата двух одинаково больших значений

Я использую функцию 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, а не оба.

4b9b3361

Ответ 1

Идея - найти максимальное значение и получить все ключи, соответствующие этому значению:

count = {'a': 120, 'b': 120, 'c': 100}

highest = max(count.values())

print([k for k, v in count.items() if v == highest])

Ответ 2

Та же идея, что и 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

Ответ 3

Быстрый проход:

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'])

Ответ 4

Это может быть способ (возможно, не самый эффективный).

value = max(count.values())
filter(lambda key: count[key]==value,count)

Ответ 5

Иногда самое простое решение может быть лучшим:

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]

Конечно, это длиннее, но, с другой стороны, это очень понятно и легко читать.

Ответ 6

Чтобы распечатать список без ведра. используйте:

' '.join(map(str, mylist))

или, более подробно:

' '.join(str(x) for x in mylist)