平均Python中两个配对列表的重复值

Ein*_*nar 3 python list

在我的代码中,我从不同的来源获得两个不同的列表,但我知道它们的顺序相同.第一个列表("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}
Run Code Online (Sandbox Code Playgroud)

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

Gle*_*ard 5

from collections import defaultdict
def averages(names, values):
    # Group the items by name.
    value_lists = defaultdict(list)
    for name, value in zip(names, values):
        value_lists[name].append(value)

    # Take the average of each list.
    result = {}
    for name, values in value_lists.iteritems():
        result[name] = sum(values) / float(len(values))
    return result

names = ["pears", "apples", "pears", "bananas", "pears"]
result_values = [2, 1, 4, 8, 6]
print averages(names, result_values)
Run Code Online (Sandbox Code Playgroud)