Python Dictionary - 从其他值中查找值的平均值

时间:2017-02-18 01:03:30

标签: python dictionary find average

我有以下列表

count = 3.5, price = 2500

count = 3, price = 400

count = 2, price = 3000

count = 3.5, price = 750

count = 2, price = 500

我想找到所有计数相同的平均价格。例如:

count = 2, price = 3000

count = 2, price = 500

3000 + 500 = 3500

3500/2 = 1750

'计数2'的平均值为1750

到目前为止,这是我的代码

avg_list = [value["average"] for value in dictionary_database_list] 

counter_obj = collections.Counter(count_list)

print ("AVG:")

for i in counter_obj:

    print (i, counter_obj[i])

2 个答案:

答案 0 :(得分:1)

我承认我并不是100%清楚你在这里寻找什么,但我会试一试:

一种好的策略,当您想要遍历一个"事物列表时#34;并积累某些关于"同类事物的信息"是使用哈希表。在Python中,我们通常使用dict来获取需要哈希表的算法。

要收集足够的信息以获取列表中每件商品的平均价格,我们需要:

  

a)具有特定"计数"

的项目总数      

b)具有特定"计数"

的项目的总价格

因此,让我们构建一个数据结构来映射"计数"包含"总项目的字典"和#34;总价格"对于具有该"计数"。

的项目

让我们以以下格式输入:

item_list = [
    {'count': 3.5, 'price': 2500},
    {'count': 3, 'price': 400},
    {'count': 2, 'price': 3000},
    {'count': 3.5, 'price': 750},
    {'count': 2, 'price': 500},
]

现在让我们来映射关于"总项目的信息"和#34;总价格"在名为dict的{​​{1}}中:

items_by_count

但是等待! for item in item_list: count, price = item['count'], item['price'] items_by_count[count]['total_items'] += 1 items_by_count[count]['total_price'] += price 如果{d}已经存在items_by_count[count],则会抛出KeyError。这是defaultdict的一个很好的用例。我们将之前从未见过的count的默认值定义为0总价格和0总项目:

count

现在每当我们看到from collections import defaultdict items_by_count = defaultdict(lambda: { 'total_items': 0, 'total_price': 0 }) 的新值时,我们的代码都不会抛出异常。

最后,我们需要实际取平均值。让我们在另一个count中获取我们需要的信息,映射计数到平均价格。这是dict comprehension的一个很好的用例:

dict

这会迭代{count: item['total_price'] / item['total_items'] for count, item in items_by_count.iteritems()} dict并创建我们想要的新dict。

全部放在一起:

items_by_count

如果我们传入示例输入dict,则此函数返回: from collections import defaultdict def get_average_price(item_list): items_by_count = defaultdict(lambda: { 'total_items': 0, 'total_price': 0 }) for item in item_list: count, price = item['count'], item['price'] items_by_count[count]['total_items'] += 1 items_by_count[count]['total_price'] += price return {count: item['total_price'] / item['total_items'] for count, item in items_by_count.iteritems()}

希望你想要的输出!在特定的Python版本中要小心float division之类的问题。

答案 1 :(得分:-2)

您需要迭代您的商品

See documentation

  • avg(dictionary.values())可能是你想要的