Python 什么';这两种语法有什么区别?字典get()
1和2的区别是什么?为什么结果不一样?Python 什么';这两种语法有什么区别?字典get(),python,Python,1和2的区别是什么?为什么结果不一样?dict.get()返回默认值,None,除非您指定其他内容,或者指定键的值(如果存在)。您正在测试返回的值或None是否为真值。任何不是None或数字0或空容器的内容都是真的。看 这意味着,如果字典没有键,但该键的值为0或空容器或无或甚至假,则测试失败 其他测试仅针对密钥进行测试。然后,与键关联的值是什么并不重要 比较: def twoSum(self, num, target): d = {n:pos for pos, n in enumerat
dict.get()
返回默认值,None
,除非您指定其他内容,或者指定键的值(如果存在)。您正在测试返回的值或None
是否为真值。任何不是None
或数字0或空容器的内容都是真的。看
这意味着,如果字典没有键,但该键的值为0或空容器或无
或甚至假
,则测试失败
其他测试仅针对密钥进行测试。然后,与键关联的值是什么并不重要
比较:
def twoSum(self, num, target):
d = {n:pos for pos, n in enumerate(num)}
for i, n in enumerate(num):
if d.get(target-n): # 1
# if target - n in d: # 2
return (i+1, d[target-n]+1)
return None
对于您的特定情况,num
中的第一个值总是被赋予索引0
,当作为布尔值进行测试时,该值为false:
>>> d = {'foo': 0}
>>> d.get('foo')
0
>>> bool(d.get('foo'))
False
>>> 'foo' in d
True
请尝试以下代码:
>>> num = 3, 2, 4
>>> d = {n:pos for pos, n in enumerate(num)}
>>> d
{2: 1, 3: 0, 4: 2}
>>> bool(d.get(3))
False
由于
None
的计算结果为False
,因此第一个示例不打印“foo”
。但是第二个示例总是打印“bar”
,因为键'a'
在字典中。为什么结果不一样
-什么输入?你得到了什么输出?如果我使用2,我将得到以下结果:输入:[3,2,4],6输出:1,1预期:2,3这是一种非常奇怪的创建字典的方法,而不是仅仅写出字典的文字。@Dunes:它被称为字典理解,我用它来显示为给定的输入生成了什么。原始帖子中的代码使用字典理解;因为正是enumerate()
调用为3
生成了0
,所以这里很重要。
if {'a': None}.get('a'):
print "foo"
if 'a' in {'a': None}:
print "bar"