问题
I have a dictionary D set up as D={('a','b'):['1000','5','.3'], ('c','d'):['2000','8','-.8']}
where ('a','b') and ('c','d') are the keys. I am having trouble finding the maximum of the first values in the lists. So in using max(D) I need it to return ('c','d'). Keep in mind my list is hundreds of pairings. I just need to have the max() function be able to recognize the first value '2000' and '1000' and find the maximum of those. Any help or suggestions would be greatly appreciated.
回答1:
You need to iterate through the dictionary, converting the first value's item to an int, and saving them for later:
first_values = []
for val in D.values():
first_values.append(int(val[0]))
print(max(first_values))
回答2:
python max function takes a key that you can use to define your function or lambda.
D={('a','b'):['1000','5','.3'], ('c','d'):['2000','8','-.8']}
res=max(D.items(), key=lambda k: int(k[1][0]))
print(res[0])
output:
('c', 'd')
Explanation:
In the code above, k will be the nth item/value pair as a tuple of your dictionary D. For first item k is (('a','b'),['1000','5','.3'])
. Then int(k[1][0])
returns 1000. We need to convert to int otherwise max will do string comparison.
Online link for above code: http://ideone.com/qmZvs8
回答3:
Taking your question literally, the max of '2000', '1000', etc is produced as follows
mx = max(val[0] for val in D.values())
or
from operator import itemgetter
mx = max(D.values(), key=itemgetter(0))[0
or
mx = max(D.values(), key=lambda val: val[0])[0]
Interpreting your question to mean max of 2000, 1000, etc (int('2000'), int('1000')
mx = max(int(val[0]) for val in D.values())
Interpreting your question a bit more, to include wanting the key with the max first value:
mxpair = max(d.items(), key=lambda item: int(item[1][0]))
key, mx = mxpair[0], mxpair[1][0])
来源:https://stackoverflow.com/questions/26833373/python-max-value-in-a-dictionary-with-2-keys