Python 数据项中不存在元素时如何获取零值

Python 数据项中不存在元素时如何获取零值,python,Python,当我运行以下代码时 for (x,y) in [(x,y) for x in Sites for y in Products] : prob += (SupplyValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if j==x and k==y]) >= DemandValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if i==x an

当我运行以下代码时

for (x,y) in [(x,y) for x in Sites for y in Products] : 

    prob += (SupplyValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if j==x  and k==y]) >=
             DemandValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if i==x and k==y])), "Product Flow:%s %s" %(x,y)
我得到错误:
没有数据项“DemandValue”的索引项(PL1,P1)。

我希望在条目不可用时获得零值,并继续循环。与iferror在excel中所做的工作大致相同

try:
     prob += (SupplyValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if j==x  and k==y]) >=
     DemandValue[(x,y)] + lpSum([vars[(i,j,k)] for (i,j,k) in TP if i==x and k==y])), "Product Flow:%s %s" %(x,y)
except:
     pass
您总是可以捕获错误并忽略它们;)

编辑:我听说,这是一个线性规划问题,您不想在每个迭代步骤中添加try/except来重新构造循环,这是我的建议,对不起

但是,我仍然认为这个方法是可行的。。有点…:

def getDemandValue(x,y):
    try:
        return DemandValue[(x,y)]
    except:
        return 0


DemandValue
使用
collections.defaultdict

In [1]: import collections

In [2]: DemandValue = collections.defaultdict(lambda: 0)

In [3]: DemandValue[0]
Out[3]: 0

In [4]: DemandValue[1]
Out[4]: 0

In [5]: DemandValue[0] = 12

In [6]: DemandValue[3] = 2

In [7]: DemandValue
Out[7]: defaultdict(<function <lambda> at 0x807ab0400>, {0: 12, 1: 0, 3: 2})

In [8]: DemandValue[7]
Out[8]: 0
[1]中的
:导入集合
在[2]中:DemandValue=collections.defaultdict(lambda:0)
在[3]中:需求值[0]
Out[3]:0
在[4]中:需求值[1]
Out[4]:0
在[5]中:需求值[0]=12
在[6]中:需求值[3]=2
在[7]中:需求值
Out[7]:defaultdict(,{0:12,1:0,3:2})
在[8]中:需求值[7]
Out[8]:0
更新:要重新使用现有词典:

In [1]: import collections

In [2]: normal = {1: 'foo', 'test': 'bar', (3,4): 17}

In [3]: d = collections.defaultdict(lambda: 0, normal)

In [4]: d
Out[4]: defaultdict(<function <lambda> at 0x807a90f28>, {1: 'foo', 'test': 'bar', (3, 4): 17})
[1]中的
:导入集合
在[2]中:normal={1:'foo','test':'bar',(3,4):17}
在[3]中:d=collections.defaultdict(lambda:0,正常)
在[4]:d中
Out[4]:defaultdict(,{1:'foo','test':'bar',(3,4):17})

谢谢你的建议。然而,当我将默认值设置为demandvalue时,我得到了一个错误——“demandvalue”是一个包含1500项的字典,因此无法为其分配一个包含0项的新字典值。有办法吗?@AnkurGupta请看最新答案。如果这不起作用,请编辑你的问题,并准确显示你做了什么以及你收到了什么错误信息。这样做将完全消除这个等式。如果找不到键,我只想将demandvalue值设置为零。
In [1]: import collections

In [2]: normal = {1: 'foo', 'test': 'bar', (3,4): 17}

In [3]: d = collections.defaultdict(lambda: 0, normal)

In [4]: d
Out[4]: defaultdict(<function <lambda> at 0x807a90f28>, {1: 'foo', 'test': 'bar', (3, 4): 17})