如何编写Python函数,按多个键分组并计算字典列表中值的平均值?

2026-04-03 02:031阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计703个文字,预计阅读时间需要3分钟。

如何编写Python函数,按多个键分组并计算字典列表中值的平均值?

什么是通过多个键进行分组的Pythonic方法,并在Python中计算字典列表的平均值?

以下是一个Pythonic方法,通过多个键对字典列表进行分组,并计算每个组内字典列表的平均值:

python示例数据input=[{'dept': '001', 'score': 80}, {'dept': '001', 'score': 90}, {'dept': '002', 'score': 70}, {'dept': '002', 'score': 80}]

通过多个键分组并计算平均值def group_and_average(data, keys): result={} for item in data: key=tuple(item[k] for k in keys) if key not in result: result[key]=[] result[key].append(item['score']) for key, scores in result.items(): result[key]=sum(scores) / len(scores) return result

使用函数average_scores=group_and_average(input, ['dept', 'score'])print(average_scores)

什么是通过多个键进行分组的最pythonic方法,并在Python中汇总字典列表的平均值假设我有一个字典列表如下input[{dept:001,sk

什么是通过多个键进行分组的最pythonic方法,并在Python中汇总字典列表的平均值假设我有一个字典列表如下

input [

{dept: 001, sku: foo, transId: uniqueId1, qty: 100},

{dept: 001, sku: bar, transId: uniqueId2, qty: 200},

{dept: 001, sku: foo, transId: uniqueId3, qty: 300},

{dept: 002, sku: baz, transId: uniqueId4, qty: 400},

{dept: 002, sku: baz, transId: uniqueId5, qty: 500},

{dept: 002, sku: qux, transId: uniqueId6, qty: 600},

{dept: 003, sku: foo, transId: uniqueId7, qty: 700}

]

期望的聚合输出

output[

{dept: 001, sku: foo, qty: 400},

{dept: 001, sku: bar, qty: 200},

{dept: 002, sku: baz, qty: 900},

{dept: 002, sku: qux, qty: 600},

{dept: 003, sku: foo, qty: 700}

]

如何编写Python函数,按多个键分组并计算字典列表中值的平均值?

或平均

output[

{dept: 001, sku: foo, avg: 200},

{dept: 001, sku: bar, avg: 200},

{dept: 002, sku: baz, avg: 450},

{dept: 002, sku: qux, avg: 600},

{dept: 003, sku: foo, avg: 700}

]

解决方法:

获得汇总结果

from itertools import groupby

from operator import itemgetter

grouper itemgetter("dept", "sku")

result []

for key, grp in groupby(sorted(input_data, key grouper), grouper):

temp_dict dict(zip(["dept", "sku"], key))

temp_dict["qty"] sum(item["qty"] for item in grp)

result.append(temp_dict)

from pprint import pprint

pprint(result)

产量

[{dept: 001, qty: 200, sku: bar},

{dept: 001, qty: 400, sku: foo},

{dept: 002, qty: 900, sku: baz},

{dept: 002, qty: 600, sku: qux},

{dept: 003, qty: 700, sku: foo}]

要获得平均值,您可以简单地更改for循环内的内容,就像这样

temp_dict dict(zip(["dept", "sku"], key))

temp_list [item["qty"] for item in grp]

temp_dict["avg"] sum(temp_list) / len(temp_list)

result.append(temp_dict)

产量

[{avg: 200, dept: 001, sku: bar},

{avg: 200, dept: 001, sku: foo},

{avg: 450, dept: 002, sku: baz},

{avg: 600, dept: 002, sku: qux},

{avg: 700, dept: 003, sku: foo}]

建议无论如何,我会在这样的dict中添加qty和avg

temp_dict dict(zip(["dept", "sku"], key))

temp_list [item["qty"] for item in grp]

temp_dict["qty"] sum(temp_list)

temp_dict["avg"] temp_dict["qty"] / len(temp_list)

result.append(temp_dict)

产量

[{avg: 200, dept: 001, qty: 200, sku: bar},

{avg: 200, dept: 001, qty: 400, sku: foo},

{avg: 450, dept: 002, qty: 900, sku: baz},

{avg: 600, dept: 002, qty: 600, sku: qux},

{avg: 700, dept: 003, qty: 700, sku: foo}]

标签python,list,dictionary

本文共计703个文字,预计阅读时间需要3分钟。

如何编写Python函数,按多个键分组并计算字典列表中值的平均值?

什么是通过多个键进行分组的Pythonic方法,并在Python中计算字典列表的平均值?

以下是一个Pythonic方法,通过多个键对字典列表进行分组,并计算每个组内字典列表的平均值:

python示例数据input=[{'dept': '001', 'score': 80}, {'dept': '001', 'score': 90}, {'dept': '002', 'score': 70}, {'dept': '002', 'score': 80}]

通过多个键分组并计算平均值def group_and_average(data, keys): result={} for item in data: key=tuple(item[k] for k in keys) if key not in result: result[key]=[] result[key].append(item['score']) for key, scores in result.items(): result[key]=sum(scores) / len(scores) return result

使用函数average_scores=group_and_average(input, ['dept', 'score'])print(average_scores)

什么是通过多个键进行分组的最pythonic方法,并在Python中汇总字典列表的平均值假设我有一个字典列表如下input[{dept:001,sk

什么是通过多个键进行分组的最pythonic方法,并在Python中汇总字典列表的平均值假设我有一个字典列表如下

input [

{dept: 001, sku: foo, transId: uniqueId1, qty: 100},

{dept: 001, sku: bar, transId: uniqueId2, qty: 200},

{dept: 001, sku: foo, transId: uniqueId3, qty: 300},

{dept: 002, sku: baz, transId: uniqueId4, qty: 400},

{dept: 002, sku: baz, transId: uniqueId5, qty: 500},

{dept: 002, sku: qux, transId: uniqueId6, qty: 600},

{dept: 003, sku: foo, transId: uniqueId7, qty: 700}

]

期望的聚合输出

output[

{dept: 001, sku: foo, qty: 400},

{dept: 001, sku: bar, qty: 200},

{dept: 002, sku: baz, qty: 900},

{dept: 002, sku: qux, qty: 600},

{dept: 003, sku: foo, qty: 700}

]

如何编写Python函数,按多个键分组并计算字典列表中值的平均值?

或平均

output[

{dept: 001, sku: foo, avg: 200},

{dept: 001, sku: bar, avg: 200},

{dept: 002, sku: baz, avg: 450},

{dept: 002, sku: qux, avg: 600},

{dept: 003, sku: foo, avg: 700}

]

解决方法:

获得汇总结果

from itertools import groupby

from operator import itemgetter

grouper itemgetter("dept", "sku")

result []

for key, grp in groupby(sorted(input_data, key grouper), grouper):

temp_dict dict(zip(["dept", "sku"], key))

temp_dict["qty"] sum(item["qty"] for item in grp)

result.append(temp_dict)

from pprint import pprint

pprint(result)

产量

[{dept: 001, qty: 200, sku: bar},

{dept: 001, qty: 400, sku: foo},

{dept: 002, qty: 900, sku: baz},

{dept: 002, qty: 600, sku: qux},

{dept: 003, qty: 700, sku: foo}]

要获得平均值,您可以简单地更改for循环内的内容,就像这样

temp_dict dict(zip(["dept", "sku"], key))

temp_list [item["qty"] for item in grp]

temp_dict["avg"] sum(temp_list) / len(temp_list)

result.append(temp_dict)

产量

[{avg: 200, dept: 001, sku: bar},

{avg: 200, dept: 001, sku: foo},

{avg: 450, dept: 002, sku: baz},

{avg: 600, dept: 002, sku: qux},

{avg: 700, dept: 003, sku: foo}]

建议无论如何,我会在这样的dict中添加qty和avg

temp_dict dict(zip(["dept", "sku"], key))

temp_list [item["qty"] for item in grp]

temp_dict["qty"] sum(temp_list)

temp_dict["avg"] temp_dict["qty"] / len(temp_list)

result.append(temp_dict)

产量

[{avg: 200, dept: 001, qty: 200, sku: bar},

{avg: 200, dept: 001, qty: 400, sku: foo},

{avg: 450, dept: 002, qty: 900, sku: baz},

{avg: 600, dept: 002, qty: 600, sku: qux},

{avg: 700, dept: 003, qty: 700, sku: foo}]

标签python,list,dictionary