如何在Python字典中对同一键进行多次转换

问题描述 投票:0回答:3

我是库存经理,我的库存如下

oldstock = {"A":100,"B":120,"C":150,"D":100,"E":230,"F":200,"G":180,"H":140,"I":90,"J":50}

但是,我从下面的每个箱子中出售了一些物品(似乎字典的表述是最好的表示方式)

sale = [{"A":20},{"C":25},{"E":15},{"F":18},{"H":20},{"C":35},{"A":40},{"A":5},{"E":40},{"H":20}]

每箱销售完成后如何计算新库存?

python list dictionary
3个回答
0
投票

更干净,易于理解的方法将是这样的:

for item in sale:
    for k, v in item.items():
        # an extra check, you can remove this if you know for sure that sale will never have any key which is not in oldstock
        if k in oldstock:
            oldstock[k] = oldstock[k] - v

print(oldstock)
# {'A': 35, 'B': 120, 'C': 90, 'D': 100, 'E': 175, 'F': 182, 'G': 180, 'H': 100, 'I': 90, 'J': 50}

希望这会有所帮助。祝你好运。


0
投票

我已经尝试过以下方法,但是看起来太复杂了,难以理解(就像他们说的那样,简单胜于复杂)

oldstock = {"A":100,"B":120,"C":150,"D":100,"E":230,"F":200,"G":180,"H":140,"I":90,"J":50}

sale = [{"A":20},{"C":25},{"E":15},{"F":18},{"H":20},{"C":35},{"A":40},{"A":5},{"E":40},{"H":20}]

for item in sale:
    oldstock[list(item.keys())[0]] = oldstock.get(list(item.keys())[0], 0) - list(item.values())[0]

print(oldstock)

如果您有更好的答案,我不介意多学一点。同时,我可以自由重组旧库存和销售对象


0
投票

如果您可以重组数据(如your answer中所述,则存储销售的一种简单方法是使用元组而不是字典。

sale = [('A', 20), ('C', 25), ('E', 15), ('F', 18), ('H', 20), ('C', 35), ('A', 40), ('A', 5), ('E', 40), ('H', 20)]

然后使用

for item, sale_val in sale:
    oldstock[item] -= sale_val
© www.soinside.com 2019 - 2024. All rights reserved.