在我的代码中,我从不同来源获得了两个不同的列表,但我知道它们的顺序相同。第一个列表(“names”)包含一个键字符串列表,而第二个(“result_values”)是一系列浮点数。我需要使这对唯一,但我不能使用字典,因为只保留插入的最后一个值:相反,我需要对具有重复键的值求平均值(算术平均值)。

想要的结果示例:

names = ["pears", "apples", "pears", "bananas", "pears"]
result_values = [2, 1, 4, 8, 6] # ints here but it's the same conceptually

combined_result = average_duplicates(names, result_values)

print combined_result

{"pears": 4, "apples": 1, "bananas": 8}

我唯一的想法涉及多次迭代,到目前为止一直很丑……这个问题有一个优雅的解决方案吗?

最佳答案

反正我会用字典

averages = {}
counts = {}
for name, value in zip(names, result_values):
    if name in averages:
        averages[name] += value
        counts[name] += 1
    else:
        averages[name] = value
        counts[name] = 1
for name in averages:
    averages[name] = averages[name]/float(counts[name])

如果您关心大型列表,那么我会将 zip 替换为 itertools 中的 izip

关于python - 对 Python 中两个配对列表中的重复值求平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4022465/

10-12 22:00