Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这两种语法有什么区别?字典get()_Python - Fatal编程技术网

Python 什么';这两种语法有什么区别?字典get()

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

1和2的区别是什么?为什么结果不一样?

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"