如何正确编写涉及python词典的布尔表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确编写涉及python词典的布尔表达式相关的知识,希望对你有一定的参考价值。
我有两个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
要设置上下文,这两个字典包含概率分布的参数
答案
在第一种情况下,最好使用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
以上是关于如何正确编写涉及python词典的布尔表达式的主要内容,如果未能解决你的问题,请参考以下文章
Haskell 布尔表达式:解析错误(可能不正确的缩进或不匹配的括号)