可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm using Python's max function to find the largest integer in a dictionary called count
, and the corresponding key (not quite sure if I'm saying it properly; my code probably explains itself better than I'm explaining it). The dictionary count
is along the lines of {'a': 100, 'b': 210}
, and so on.
number = count[max(count.items(), key=operator.itemgetter(1))[0]]
highest = max(count, key=count.get)
What would I do if there were two equal largest values in there? If I had {'a': 120, 'b': 120, 'c': 100}
, this would only find the first of a
and b
, not both.
回答1:
Idea is to find max value and get all keys corresponding to that value:
count = {'a': 120, 'b': 120, 'c': 100}
highest = max(count.values())
print([k for k, v in count.items() if v == highest])
回答2:
Same idea as Asterisk, but without iterating over the list twice. Bit more verbose.
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:
Fast single pass:
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']]
And an amusing way with 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:
This could be a way (probably not the most efficient).
value = max(count.values())
filter(lambda key: count[key]==value,count)
回答5:
Sometimes simplest solution may be the best:
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
The code above is slightly faster than two pass solution like:
highest = max(count.values())
print [k for k,v in count.items() if v == highest]
Of course it's longer, but on the other hand it's very clear and easy to read.
回答6:
To print a list without bucket. use :
' '.join(map(str, mylist))
or, more verbosely:
' '.join(str(x) for x in mylist)