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

Python实现字典/列表匹配项合并及数值求和处理

问题描述

我有一个包含列表的字典(或直接是列表形式的数据集),需要遍历数据并合并匹配项——按酒店名称分组,将对应value列的数值相加,最终输出合并后的结果。

示例输入数据

idnamedatevalue
1hotel122-11-2290
2hotel222-11-2290
3hotel322-11-2290
4hotel123-11-2210
5hotel223-11-2260
6hotel323-11-2290

期望输出

{
    "hotelName": "hotel1",
    "date": "22-11-22",
    "value": "100"
}
{
    "hotelName": "hotel2",
    "date": "22-11-22",
    "value": "150"
}
{
    "hotelName": "hotel3",
    "date": "22-11-22",
    "value": "180"
}

我尝试直接遍历列表,但只能输出未合并的原始数据,求解决方法。


解决方案

核心思路:用字典分组求和

用酒店名称作为字典的键,存储每个酒店的累计value和对应日期(默认取第一条数据的日期,匹配你的期望输出)。遍历原始数据时,判断酒店是否已在字典中:

  • 若存在:累加value
  • 若不存在:初始化该酒店的条目

这种方法时间复杂度为O(n),遍历一次数据即可完成分组,效率较高。

代码实现

假设原始数据是列表格式(如果是字典嵌套列表,比如data = {"items": [你的数据]},取data["items"]即可):

# 原始数据列表
raw_data = [
    {"id": 1, "name": "hotel1", "date": "22-11-22", "value": 90},
    {"id": 2, "name": "hotel2", "date": "22-11-22", "value": 90},
    {"id": 3, "name": "hotel3", "date": "22-11-22", "value": 90},
    {"id": 4, "name": "hotel1", "date": "23-11-22", "value": 10},
    {"id": 5, "name": "hotel2", "date": "23-11-22", "value": 60},
    {"id": 6, "name": "hotel3", "date": "23-11-22", "value": 90},
]

# 初始化分组字典
grouped = {}

for item in raw_data:
    hotel_name = item["name"]
    current_value = item["value"]
    current_date = item["date"]
    
    if hotel_name in grouped:
        # 已存在该酒店,累加value
        grouped[hotel_name]["value"] += current_value
    else:
        # 首次出现,初始化条目
        grouped[hotel_name] = {
            "hotelName": hotel_name,
            "date": current_date,
            "value": current_value
        }

# 转换为列表格式,输出结果
result = list(grouped.values())

# 格式化输出(将value转为字符串,匹配期望格式)
for item in result:
    item["value"] = str(item["value"])
    print(item)

输出结果

{'hotelName': 'hotel1', 'date': '22-11-22', 'value': '100'}
{'hotelName': 'hotel2', 'date': '22-11-22', 'value': '150'}
{'hotelName': 'hotel3', 'date': '22-11-22', 'value': '180'}

补充说明

  • 如果需要按酒店+日期分组(同一酒店不同日期分开统计),只需将字典的键改为元组(hotel_name, current_date),逻辑不变。
  • 代码中value转字符串是为了匹配你期望的输出格式,不需要的话可以去掉转换步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:35:32