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

如何按item与date条件合并字典列表并格式化展示库存数据?

实现字典列表的条件合并与表格展示

需求背景

给定输入字典列表:

input = [
{'date':'2023-03-1', 'item':'i1', 'balance': 11, 'warehouse' : 'W1'},
{'date':'2023-03-2', 'item':'i1', 'balance': 12, 'warehouse' : 'W1'},
{'date':'2023-03-3', 'item':'i1', 'balance': 13, 'warehouse' : 'W1'},

{'date':'2023-04-2', 'item':'i2', 'balance': 11, 'warehouse' : 'W2'},
{'date':'2023-04-3', 'item':'i2', 'balance': 10, 'warehouse' : 'W2'},

{'date':'2023-03-3', 'item':'i1', 'balance': 10, 'warehouse' : 'W3'},
]

需按查询条件 item='i1' and date='2023-03-3' 合并数据,生成如下格式的结果字典:

[{'date':'2023-03-3', 'item':'i1' , 'W1':13,'W2':0,'W3':10}]

最终将结果展示为表格:

DateitemW1W2W3
2023-03-3i113010

实现方案

核心思路

  1. 先收集所有仓库名称,确保结果中包含所有仓库,无数据的仓库余额设为0
  2. 筛选符合查询条件的记录,填充对应仓库的余额
  3. 按需生成表格展示

Python代码实现

def merge_warehouse_data(input_data, target_item, target_date):
    # 提取所有存在的仓库
    all_warehouses = {entry['warehouse'] for entry in input_data}
    # 初始化结果字典,设置基础字段和默认余额0
    merged = {
        'date': target_date,
        'item': target_item
    }
    for warehouse in all_warehouses:
        merged[warehouse] = 0
    # 遍历数据,更新符合条件的仓库余额
    for entry in input_data:
        if entry['item'] == target_item and entry['date'] == target_date:
            merged[entry['warehouse']] = entry['balance']
    return [merged]

# 测试调用
input_data = [
{'date':'2023-03-1', 'item':'i1', 'balance': 11, 'warehouse' : 'W1'},
{'date':'2023-03-2', 'item':'i1', 'balance': 12, 'warehouse' : 'W1'},
{'date':'2023-03-3', 'item':'i1', 'balance': 13, 'warehouse' : 'W1'},

{'date':'2023-04-2', 'item':'i2', 'balance': 11, 'warehouse' : 'W2'},
{'date':'2023-04-3', 'item':'i2', 'balance': 10, 'warehouse' : 'W2'},

{'date':'2023-03-3', 'item':'i1', 'balance': 10, 'warehouse' : 'W3'},
]

# 执行合并
result = merge_warehouse_data(input_data, 'i1', '2023-03-3')
print(result)  # 输出期望的字典列表

生成表格展示

如果需要输出表格格式,可以使用tabulate库简化操作(先执行pip install tabulate安装):

from tabulate import tabulate

# 提取表头和数据行
headers = ['Date', 'item'] + list({entry['warehouse'] for entry in input_data})
data_row = [result[0]['date'], result[0]['item']] + [result[0][wh] for wh in headers[2:]]

# 打印表格
print(tabulate([data_row], headers=headers, tablefmt="pipe"))

执行后会直接输出符合要求的表格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:13:10