我有一个字典D设置为D={('a','b'):['1000','5','.3'], ('c','d'):['2000','8','-.8']}
,其中('a','b')和('c','d')是键。我无法找到列表中第一个值的最大值。所以在使用max(D)时我需要它返回('c','d')。请记住,我的列表是数百个配对。我只需要让max()函数能够识别第一个值'2000'和'1000'并找到它们的最大值。任何帮助或建议将不胜感激。
答案 0 :(得分:4)
python max function接受一个可用于定义函数或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])
<强>输出:强>
('c', 'd')
<强>说明:强>
在上面的代码中,k将是第n个项目/值对作为字典D的元组。对于第一个项目k是(('a','b'),['1000','5','.3'])
。然后int(k[1][0])
返回1000.我们需要转换为int,否则max将进行字符串比较。
以上代码的在线链接:http://ideone.com/qmZvs8
答案 1 :(得分:2)
您需要遍历字典,将第一个值的项转换为int,并保存它们以供日后使用:
first_values = []
for val in D.values():
first_values.append(int(val[0]))
print(max(first_values))
答案 2 :(得分:0)
从字面上看你的问题,&#39; 2000&#39;&#39; 1000&#39;等的最大值产生如下
mx = max(val[0] for val in D.values())
或
from operator import itemgetter
mx = max(D.values(), key=itemgetter(0))[0
或
mx = max(D.values(), key=lambda val: val[0])[0]
将您的问题解释为最多2000,1000等(int(&#39; 2000&#39;),int(&#39; 1000&#39;)
mx = max(int(val[0]) for val in D.values())
更多地解释您的问题,包括想要具有最大第一个值的键:
mxpair = max(d.items(), key=lambda item: int(item[1][0]))
key, mx = mxpair[0], mxpair[1][0])