Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典-从其他值中查找值的平均值_Python_Dictionary_Find_Average - Fatal编程技术网

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

Python字典-从其他值中查找值的平均值,python,dictionary,find,average,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”的平均值为1

我有以下清单

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])

您需要迭代您的项目

avgdictionary.values可能是您想要的
我承认我不是100%清楚你在这里寻找什么,但我会试一试:

当您想要迭代一系列事物并积累关于同类事物的某种信息时,一个好的策略是使用哈希表。在Python中,对于需要哈希表的算法,我们通常使用dict

为了收集足够的信息以获得您列表中每种商品的平均价格,我们需要:

a具有特定计数的项目总数

b具有特定计数的项目的总价

因此,让我们构建一个数据结构,将一个计数映射到一个dict,该dict包含项目总数和具有该计数的项目的总价

让我们以以下格式进行输入:

item_list = [
    {'count': 3.5, 'price': 2500},
    {'count': 3, 'price': 400},
    {'count': 2, 'price': 3000},
    {'count': 3.5, 'price': 750},
    {'count': 2, 'price': 500},
]
现在,让我们在一个名为items\u by\u count的dict中映射有关总项目和总价格的信息:

但是等等!如果count不在dict中,items_by_count[count]将抛出一个键错误。这是一个很好的dict用例。让我们将以前从未见过的计数的默认值定义为0 total price和0 total items:

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

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

这将逐项遍历dict,并创建我们想要的新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()}
如果传入示例输入dict,此函数将返回: {3.5:1625,2:1750,3:400}


希望这是您想要的输出!注意不要在特定的Python版本中出现类似的问题。

dictionary标记看起来是一个很好的开始。到目前为止,您尝试了什么?代码简单!再想一想你会做到的!!:如果有一个函数可以通过共享键对项目进行分组就好了!哦,等等,我能得到一个物体的计数。所以我能够计算出count=2出现的次数。但我不知道如何将其与价格进行比较。这是我想要的have@KernelPanic符合事实的但这归根结底是对数据进行排序,因为分组是groupby所做的,计算平均值是必须的。调用statistics.mean并不是很难,是吗?虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我想我可以帮你在@phunsukwangdu发表评论后只发布一个方法,然后我也投了赞成票简单代码'。PD:我发布了python官方文档中的permalink。可能会发生变化,但删除了一个非常常见的方法…idtsI仍然对这个方法非常迷茫。。。不知道如何实现avgdictionary.values这正是我想要的,而且它工作得非常完美!!你真棒!
{count: item['total_price'] / item['total_items']
for count, item in items_by_count.iteritems()}
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()}