我想比较python dict中2个或更多键的值并返回最高值。我可以找到2个键的最大值,但我对3键及以上的键无能为力。
这是我的2键比较代码:
d = {}
d['right'] = [0.1, 0.3, 0.5]
d['left'] = [0.2, 0.1, 0.4]
result = [list(d)[0] if x > y else list(d)[1] for x,y in zip(list(d.values())[0], list(d.values())[1])]
# result: ['left', 'right', 'right']
现在,为3个键做最好的方法是什么?
# input:
d = {}
d['right'] = [0.1, 0.3, 0.5]
d['left'] = [0.2, 0.1, 0.4]
d['back'] = [0.0, 0.2, 0.8]
# expected result: ['left', 'right', 'back']
PS:我尽量不使用numpy
,pandas
或任何可能的库。或者如果我必须使用,我会尝试使用python中可用的任何基本库。
答案 0 :(得分:3)
您应该按降序排序字典键/值对:
bitarray
如果您愿意,可以使用keys,_ = zip(*sorted(d.items(), key=lambda x:x[1], reverse=True))
keys
#('left', 'right', 'back')
代替itemgetter
:
lambda
答案 1 :(得分:2)
您可以尝试这样的事情:
l1 = zip(*d.values())
l2 = list(d.keys())
[l2[i.index(max(i))] for i in l1]
输出:
['left', 'right', 'back']
答案 2 :(得分:0)
为N个值构造N dict,并计算每个值:
d = {}
d['right'] = [0.1, 0.3, 0.5]
d['left'] = [0.2, 0.1, 0.4]
dct = [dict(zip(d.keys(), [v[i] for v in d.values()])) for i in range(len(d.values()[0]))]
keys = [sorted(d.keys(), key=lambda key:d[key], reverse=True)[0] for d in dct]
# ['left', 'right', 'right']