在提取元素并在比较中使用它之前检查元素是否在字典中的“pythonic”方法是什么?
例如:
目前,我做
if "key1" in list2 and list2["key1"]=="5":
print "correct"
这样如果失败,它将在第一个条件下短路。但是,这会导致较长的条件语句。
然而,有没有更“pythonic”的方法?我猜想将条件包装在 try catch 中是一个更糟糕的主意。
在提取元素并在比较中使用它之前检查元素是否在字典中的“pythonic”方法是什么?
例如:
目前,我做
if "key1" in list2 and list2["key1"]=="5":
print "correct"
这样如果失败,它将在第一个条件下短路。但是,这会导致较长的条件语句。
然而,有没有更“pythonic”的方法?我猜想将条件包装在 try catch 中是一个更糟糕的主意。
不 - try/except 绝对没问题:
try:
if list2['key1'] == '5':
# do something
except KeyError:
# key wasn't found
except ValueError:
# most likely value wasn't comparable...
这种方法完全是pythonic。另一个稍有不同的是
if list2.get("key1", <-1,0 or any sensible default, e.g. None>) == 5:
print "correct"
使用这种方法,您可以使用dict.get
允许从 dict 中安全提取值的方法(并提供一种指定默认值的方法)
if list2.get("key1")==5:
print("correct")
不过,我不会将字典称为“list2”。
如果该值可以是 None,您可以选择另一个默认值:
if list2.get("key1", object()) in my_other_list:
print("correct")
或使用例外,或您的“漫长”方式。
在我看来,最蟒蛇的说法是
print 'correct' if list2.get('key1') == 5