Python词典,关键存在与后备

Hed*_*ide 2 python

这些方法之间有什么区别,不一致或缺点吗?

foo = dict(key=u"")
bar = foo.get('key', 'foobar')
Run Code Online (Sandbox Code Playgroud)

VS

foo = dict(key=u"")
bar = bool(foo['key']) or 'foobar'
Run Code Online (Sandbox Code Playgroud)

g.d*_*d.c 7

您绝对不应该使用第二种形式,因为KeyError如果您的字典中不存在该键,它将抛出一个.您只能从第二种形式获得可接受的行为,因为密钥已设置.


mur*_*d99 5

第一段代码尝试从foo与 关联中获取一个值key,如果foo没有键key,则默认为foobar。所以这里有两种情况:

  1. foo有钥匙key,所以bar设置为foo[key]
  2. foo没有钥匙key,所以bar设置为"foobar"

第二着眼于值与键相关联keyfoo,并且如果该值是falsy(即,如果bool(foo[key])==False),则默认为foobar。如果foo没有密钥,key它会引发一个KeyError. 所以这里有三种情况:

  1. foo有键key, 和bool(foo[key])==True, 所以bar设置为True
  2. foo有键key, 和bool(foo[key])==False, 所以bar设置为"foobar"
  3. foo没有钥匙key,所以代码引发了KeyError