如何正确编写涉及python字典的布尔表达式

时间:2018-08-24 05:59:35

标签: python dictionary boolean

我有两个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

要设置上下文,这两个词典包含用于概率分布的参数

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