如何正确编写涉及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词典的布尔表达式的主要内容,如果未能解决你的问题,请参考以下文章

脚本编译后如何在python中重新加载模块?

如何编写从布尔表达式查询中获取单个值的函数/触发器

Haskell 布尔表达式:解析错误(可能不正确的缩进或不匹配的括号)

Python如何在循环中证明布尔表达式并在单击按钮时取消循环

43-python-自己的词典

我的词典我做主!Python3.5生成自己的词性词典