1

在提取元素并在比较中使用它之前检查元素是否在字典中的“pythonic”方法是什么?

例如:

目前,我做

if "key1" in list2 and list2["key1"]=="5":
  print "correct"

这样如果失败,它将在第一个条件下短路。但是,这会导致较长的条件语句。

然而,有没有更“pythonic”的方法?我猜想将条件包装在 try catch 中是一个更糟糕的主意。

4

4 回答 4

7

不 - try/except 绝对没问题:

try:
    if list2['key1'] == '5':
        # do something
except KeyError:
    # key wasn't found
except ValueError:
    # most likely value wasn't comparable...
于 2013-06-03T19:42:34.640 回答
6

这种方法完全是pythonic。另一个稍有不同的是

if list2.get("key1", <-1,0 or any sensible default, e.g. None>) == 5:
    print "correct"

使用这种方法,您可以使用dict.get允许从 dict 中安全提取值的方法(并提供一种指定默认值的方法)

于 2013-06-03T19:41:46.450 回答
4
if list2.get("key1")==5:
    print("correct")

不过,我不会将字典称为“list2”。

如果该值可以是 None,您可以选择另一个默认值:

if list2.get("key1", object()) in my_other_list:
    print("correct")

或使用例外,或您的“漫长”方式。

于 2013-06-03T19:40:06.397 回答
0

在我看来,最蟒蛇的说法是

    print 'correct' if list2.get('key1') == 5
于 2013-06-03T20:30:35.110 回答