我有两个python字典结构,正在其中寻找特定的键。但是,如果值是None
,则python将其评估为0
。我正在使用Python2.7
A = {'distribution_1':{'mu':0.0,'sigma':0.5}}
B = {'distribution_1':{'sigma':0.1}}
x = A.get('mu') or B.get('mu') # This evaluates to None, expected 0.0
而
A = {'distribution_1':{'mu':0.1,'sigma':0.5}}
B = {'distribution_1':{'sigma':0.1}}
x = A.get('mu') or B.get('mu') # This evaluates to 0.1
要设置上下文,这两个词典包含用于概率分布的参数
答案 0 :(得分:1)
在第一种情况下,最好使用A["distribution_1"].get('mu')
,而这也不会更改输出。它会评估第一个条件,由于它是0
(或False),因此会评估第二个条件,即None
。
在第二种情况下,它首先计算A.get('mu')
,由于它不是zero
,因此将返回它。
看这里:
案例1:
A = {'mu':0.1}
B = {'sigma':0.5}
x = A.get('mu') or B.get('sigma')
print(x)
输出:
0.1
它将评估第一个条件,由于它是0.1
,因此将返回此条件。
案例2:
A = {'mu':0.0}
B = {'sigma':0.5}
x = A.get('mu') or B.get('sigma')
print(x)
输出:
0.5
它将评估第一个条件,由于它是0
(或False),因此将评估第二个条件。
可能的解决方案(如果您希望得到零作为答案):
A = {'mu':0.0}
B = {'sigma':0.5}
if 'mu' in A:
x = A.get('mu')
else:
x = B.get('sigma')
# or more compact: x = [A.get('mu') if 'mu' in A else B.get('sigma')][0]
print(x)
输出:
0.0