我有以下列表
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])
答案 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)