列表中每个键的最大值

时间:2018-05-17 18:59:47

标签: python

假设:

scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4]
snacks = [6,28,14, 3, 9, 8,18, 6, 7]
scoobysnacks = zip(scooby,snacks)

如何运行max(scoobysnacks)来获取:

(1,18)
(4,28)

逻辑是 18 是与 1 相关联的最大值, 28 4 <相关联的最大值< / em>的

2 个答案:

答案 0 :(得分:4)

这是一个仅遍历列表一次的解决方案,使用dict跟踪最佳对。

scooby = [1, 4, 1, 4, 1, 4, 1, 1, 4]
snacks = [6,28,14, 3, 9, 8,18, 6, 7]

pairs= {}
for x, y in zip(scooby, snacks):
    pairs[x] = max(pairs.get(x, y), y)

output = list(pairs.items())

output  # [(1, 18), (4, 28)]

答案 1 :(得分:1)

list(dict(sorted(zip(scooby, snacks))).items())

[(1, 18), (4, 28)]

O(n)

中的蹩脚单线
[
    (k, max(v)) for k, v in 
    (lambda d, x=defaultdict(list): ([x[k].append(v) for k, v in d], x))
    (zip(scooby, snacks))[1].items()
]