我需要通过遍历以下两个字典并从“ current_inventory”中减去sales_demand
来计算变量“剩余库存”。
但是,词典没有共享相同的键。即某些天没有销售,因此需求为0(例如“ 2020-02-29”)
我如何遍历字典以产生此输出而又不会由于缺少键而引起KeyError
的问题?
以下数据:
# Current inventory
inventory = {'2020-02-28':{'ASF': 220102,
'MFA': 100109,
'PRE': 218256},
'2020-03-29':{'ASF': 321200,
'MFA': 151505,
'PRE': 175000},
'2020-03-01':{'ASF': 312765,
'MFA': 300021,
'PRE': 118561},
'2020-03-02':{'ASF': 121203,
'MFA': 209909,
'PRE': 210000}}
# Sales Demand
sales = {
'2020-02-28':{
'CEYLON':{
'ASF': 55000,
'MFA': 0,
'PRE': 0
},
'PACIFIC MAJOR':{
'ASF': 100000,
'MFA': 0,
'PRE': 0
},
'CCSC YASA JING':{
'ASF': 10000,
'MFA': 6000,
'PRE': 18000
}},
'2020-03-01':{
'ABC':{
'ASF': 0,
'MFA': 0,
'PRE': 65000},
'DEF etc':{
'ASF': 0,
'MFA': 19191,
'PRE': 0}},
'2020-03-02':{
'ABC':{
'ASF': 75000,
'MFA': 10000,
'PRE': 0},
'DEF etc':{
'ASF': 55000,
'MFA': 55000,
'PRE': 0}}}
预期结果:
remaining_inventory = {}
for date in dates:
for vessel in vessels:
for grade in grades:
remaining_inventory[date][grade] = current_inventory[date][grade] - sales[date][vessel][grade]
注意-我需要跟踪每笔交易,即产品离开库存去往每艘船,因此不能简单地汇总每天,等级的总销售需求。
答案 0 :(得分:0)
我认为我不完全理解您想要的输出,因此您还必须澄清一下缩写的含义,以便更好地了解循环中要执行的操作。
为避免KeyError,我看到了两个选项
如果您知道某个词典中总是存在键,有时又会在另一个词典中存在键,请循环遍历可能包含该键的词典。因此,如果它在此较小的词典中,则它始终在另一个词典中,并且不会出现KeyError。
如果某个字典中有时存在键,而另一本字典中有时存在键,则最好遍历一个字典的键并执行以下操作:
for key in first_dict:
if key in second_dict.keys():
do_something()
编辑:我认为这是您想要做的,但我不确定100%:
for date in sales:
remaining_inventory[date] = {}
for vessel in sales[date]:
for grade in sales[date][vessel]:
remaining_inventory[date][grade] = inventory[date][grade] - sales[date][vessel][grade]thing()
输出:
{'2020-02-28': {'ASF': 210102, 'MFA': 94109, 'PRE': 200256},
'2020-03-01': {'ASF': 312765, 'MFA': 280830, 'PRE': 118561},
'2020-03-02': {'ASF': 66203, 'MFA': 154909, 'PRE': 210000}}
我添加了remaining_inventroy[date] = {}
,因为您将一个值添加到了尚不存在的字典中。