python - 如果有某些条件匹配,则合并字典列表?

标签 python

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' 且 date ='2023-03-3'

我想要这样的放置:

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

目标是以以下格式显示:

   Date   | item | W1 | W2 | W3
2023-03-3 | i1   | 13 | 0  | 10

最佳答案

如果您有权访问 pandas 库,则可以使用数据透视表来获取您要查找的内容。

import pandas as pd

df = pd.DataFrame(inputs)
pivot = df.pivot_table(index=['date', 'item'], columns='warehouse', fill_value=0).reset_index(level=(0,1), col_level=1)
pivot
pivot.columns = pivot.columns.droplevel(0)
pivot.to_dict('records')
# returns:
[{'date':'2023-03-1', 'item':'i1', 'W1': 11, 'W2':0, 'W3': 0},
 {'date':'2023-03-2', 'item':'i1', 'W1': 12, 'W2':0, 'W3': 0},
 {'date':'2023-03-3', 'item':'i1', 'W1': 13, 'W2':0, 'W3': 10},
 {'date':'2023-04-2', 'item':'i2', 'W1': 0, 'W2':11, 'W3': 0},
 {'date':'2023-04-3', 'item':'i2', 'W1': 0, 'W2':10, 'W3': 0}]

如果您不想使用 pandas,您可以使用脚本旋转数据:

pivot = {}
warehouses = set()
for d in inputs:
    k1 = d['date']
    k2 = d['item']
    w = d['warehouse']
    c = d['balance']
    warehouses.add(w)
    counts = pivot.setdefault((k1, k2), {})
    counts[w] = c
records = [{'date': k1, 'item': k2

然后显示它:

for (k1, k2) in sorted(pivot):
    counts = pivot[(k1, k2)]
    ws = ' | '.join(str(counts.get(w, 0)) for w in sorted(warehouses))
    print(f'{k1} | {k2} | {ws}')

# prints:
2023-03-1 | i1 | 11 | 0 | 0
2023-03-2 | i1 | 12 | 0 | 0
2023-03-3 | i1 | 13 | 0 | 10
2023-04-2 | i2 | 0 | 11 | 0
2023-04-3 | i2 | 0 | 10 | 0

关于python - 如果有某些条件匹配,则合并字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75888185/

相关文章:

python - "Online"函数的猴子修补

python - 如何在 Tkinter 中使用标签创建超链接?

python - 用于查找首字母缩略词并避免由该模式组成的单词的正则表达式

python - AngularJS + Flask 客户端路由

python - 来自 "Python for Data Analysis"文本的简单 groupby 示例失败

python - Django 请求数据返回 str 而不是 list

python - 高效地将大型 Pandas 数据帧写入磁盘

python - 用于匹配标题和子标题的正则表达式,后跟项目符号列表

python - ElasticSearch:仅索引映射中指定的字段

python - str.format() -> 如何左对齐