在我的代码中,我从不同的来源获得了两个不同的列表,但我知道它们的顺序相同。第一个列表(“names”)包含键字符串列表,而第二个列表(“result_values”)是一系列 float 。我需要使这对唯一,但我不能使用字典,因为只会保留最后插入的值:相反,我需要对具有重复键的值进行平均(算术平均)。
想要的结果示例:
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}
我唯一的想法涉及多次迭代,但到目前为止一直很丑陋......这个问题有一个优雅的解决方案吗?
最佳答案
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)
关于python - 平均 Python 中两个配对列表的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022465/