python中带字典的if-else语句

python中带字典的if-else语句,python,dictionary,Python,Dictionary,我试图了解为什么以下方法不起作用: 我有一本字典 ex = {'CA':'San Francisco', 'NV':'Las Vegas'} 我试图使用if-else语句来获得的“yes”: >>> if ex['CA'] is 'San Francisco': ... print 'yes' ... else: ... print 'no' ... no >>> >>> >>> if ex['CA

我试图了解为什么以下方法不起作用:

我有一本字典

ex = {'CA':'San Francisco', 'NV':'Las Vegas'}
我试图使用
if-else
语句来获得
的“yes”

>>> if ex['CA'] is 'San Francisco':
...     print 'yes'
... else:
...     print 'no'
... 
no

>>> 
>>> 
>>> if ex['CA'] == 'San Francisco' is True:
...     print 'yes'
... else:
...     print 'no'
... 
no

>>> if ex['CA'] == 'San Francisco' is True:
...     print 'yes'
... 
>>> 
在这里,我没有得到
“是的”

>>> ex['CA'] == 'San Francisco'
True

>>> ex['CA']
'San Francisco'
我想了解为什么我没有得到
“是”

>>> ex['CA'] == 'San Francisco'
True

>>> ex['CA']
'San Francisco'

如果我想使用dictionary键的条件语句等于某个值,还有什么其他方法呢?

您将
ex['CA']
'San Francisco'
(这是可以的),然后将
'San Francisco'
True
进行比较,结果总是错误的(为正确性而编辑:根本原因描述错误,但修复是相同的)

所以代码并没有做你认为它在做的事情

那就行了:

if (ex['CA'] == 'San Francisco') is True:
但蟒蛇的方式仍然存在:

if ex['CA'] == 'San Francisco':
是真的
是有效的,但是当您想要区分像
12
(甚至
1
)这样的非零值和
True

其他用法使它变得多余


顺便说一句,如果ex['CA']是'San Francisco',我不能让你写
而不受惩罚。你必须使用
=
True
是一个单例,所以
可以工作的,但这对字符串来说是不能保证的,它依赖于实现。有关详细信息,请参阅。

运算符优先级:
如果(ex['CA'='San Francisco'))是真的
不要使用
来比较字符串。旁注:使用
是真的
可能会使有效的代码出错,从技术上讲,它并不等同于简单的真实性测试,即使是
==
的结果是真的
也允许返回任何旧对象,而不仅仅是
真的
假的
因此,如果括号中的
(ex['CA']=='San Francisco')为True
并且
ex['CA']
是一个自定义对象,它带有一个非标准的
\uuuu eq\uuuuu
返回值,比如说,等于时返回
1
,不等于时返回
0
,那么与
True
的身份比较将总是以false结束(1等于
True
,但它们不是同一个对象;如果
返回
2
,它甚至不等于
True
)。问题与运算符优先级无关,只是链接比较运算符的工作方式。基本上,
ex['CA']=='San Francisco'为真
相当于
ex['CA']=='San Francisco'和'San Francisco'是真的
,就像
a
相当于
a
我写这篇文章的时候就知道这很可疑。你是对的。我会解决这个问题,这是错误的……有趣的事我想到了
a
但没有想到它在这里应用。