You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Odoo记录集按字典键分组生成新字典?含示例需求

这其实是个很常见的分组需求,结合Python的工具和Odoo记录集的特性就能轻松搞定——Odoo的记录对象是可哈希的,完全可以直接作为分组键使用。下面给你两种靠谱的实现方案:

方案一:用itertools.groupby(适合需要按partner排序的场景)

groupby是Python标准库的工具,不过要注意它只会对连续的相同元素分组,所以第一步需要先按partner字段排序:

from itertools import groupby

# 你的原始数据
original_list = [
    {'partner': res.partner(985,), 'account_id': account.account(193,), 'price_total': 420.0},
    {'partner': res.partner(985,), 'account_id': account.account(194,), 'price_total': 260.0},
    {'partner': res.partner(985,), 'account_id': account.account(95,), 'price_total': 600.0}
]

# 先按partner排序,确保相同partner的条目连在一起
sorted_list = sorted(original_list, key=lambda x: x['partner'])

# 分组并构造目标格式
dict_list = []
for partner, group in groupby(sorted_list, key=lambda x: x['partner']):
    # 提取每组的account_id和price_total组成data列表
    data_items = [{'account_id': item['account_id'], 'price_total': item['price_total']} for item in group]
    dict_list.append({'partner_id': partner, 'data': data_items})
方案二:手动用字典分组(适合无需排序、追求效率的场景)

如果不需要分组结果按partner排序,直接用字典存分组会更高效,还能避免排序的额外开销:

# 你的原始数据
original_list = [
    {'partner': res.partner(985,), 'account_id': account.account(193,), 'price_total': 420.0},
    {'partner': res.partner(985,), 'account_id': account.account(194,), 'price_total': 260.0},
    {'partner': res.partner(985,), 'account_id': account.account(95,), 'price_total': 600.0}
]

# 先按partner分组存字典
grouped_data = {}
for item in original_list:
    partner = item['partner']
    # 如果partner不在字典里,先初始化空列表
    if partner not in grouped_data:
        grouped_data[partner] = []
    # 添加当前条目的account和price信息
    grouped_data[partner].append({'account_id': item['account_id'], 'price_total': item['price_total']})

# 转换为你需要的列表格式
dict_list = [{'partner_id': p, 'data': d} for p, d in grouped_data.items()]

两种方案运行后,dict_list都会生成你期望的结果。如果原始列表里有多个不同的partner,代码也会自动为每个partner生成对应的分组项。

内容的提问来源于stack exchange,提问作者user2655334

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:39:50