如何找到具有键值乘积最大值的键的最大值

时间:2019-07-09 17:13:54

标签: python dictionary

查找具有键和值的乘积最大值的键的最大值

我得到了输出,我正在寻找最佳解决方案

a = [3,4,5,5,6,6,6,7,7]
c = set(a)
counts = {}
for i in a:
    if i in counts:
        counts[i] += 1
    else:
        counts[i] =1
#counts
t = [k*v for k,v in counts.items()]
max_index = t.index(max(t))
list(c)[max_index]
  
    

6

  

没有错误,如何优化代码。需要列表理解

for [k * v for counts.items()中的k,v。我可以在其中添加地图功能吗?

3 个答案:

答案 0 :(得分:1)

您可以use collection.Countercollections.defaultdict with int为您进行计数(比您的-valid-解决方案都快)。

要通过适当的key函数获得最大值use sorted()- see sorting overview

from collections import Counter

a = [3,4,5,5,6,6,6,7,7]
c = Counter(a)

m = sorted(c.items(),key= lambda x: x[0]*x[1], reverse = True)
print(m)

打印

[(6, 3), (7, 2), (5, 2), (4, 1), (3, 1)]

所以m[0][0]是您6的结果。

如果仅对最大值感兴趣,

max(...)也可以使用相同的键功能。


Defaultdict版本(计数器之后有更多行):

from collections import defaultdict

a = [3,4,5,5,6,6,6,7,7]
c = defaultdict(int)
for num in a:
    c[num] += 1

答案 1 :(得分:1)

更改字典,使值已与键相乘。然后,您可以使用Getting key with maximum value in dictionary?中的一种解决方案来找到具有最大值的键。

for i in a:
    if i in counts:
        counts[i] += i
    else:
        counts[i] = i

答案 2 :(得分:1)

这是您如何使用地图获取“ t”列表的方法

def function(item):
    return item[0]*item[1]
t = list(map(function, counts.items()))