比较python dict中两个或多个键中的值

时间:2018-03-22 03:36:54

标签: python dictionary

我想比较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:我尽量不使用numpypandas或任何可能的库。或者如果我必须使用,我会尝试使用python中可用的任何基本库。

3 个答案:

答案 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']