访问dict键,如果不存在则返回None

时间:2012-02-14 22:20:37

标签: python dictionary

在Python中,最有效的方法是:

my_var = some_var['my_key'] | None

即。如果some_var['my_key']包含my_var,请将some_var分配给'my_key',否则将my_var设为None

7 个答案:

答案 0 :(得分:44)

如果字典中不存在该键,Python将抛出KeyError,因此您无法以与JavaScript相同的方式编写代码。但是,如果您在示例中专门使用dicts,则会有一个非常好的函数mydict.get('key', default),它会尝试从字典中获取密钥,并在密钥不存在时返回默认值。

如果您只想默认为None,则无需显式传递第二个参数。

根据您的dict包含的内容以及您希望访问未设置密钥的频率,您可能还有兴趣使用collections包中的defaultdict。这需要一个工厂,并且只要您访问未明确设置的密钥,就会使用它从__missing__魔术方法返回新值。如果你的dict只包含一种类型,它会特别有用。

from collections import defaultdict

foo = defaultdict(list)
bar = foo["unset"]
# bar is now a new empty list

N.B。文档(适用于2.7.13)声称,如果您未将参数传递给defaultdict,则会返回None以获取未设置的密钥。当我尝试它时(在2.7.10上,这就是我碰巧安装的那个),这不起作用,我收到了KeyError。因人而异。或者,您可以使用lambda:defaultdict(lambda: None)

答案 1 :(得分:28)

您正在寻找dict的{​​{3}}方法。

my_var = some_var.get('some_key')

get()方法将返回与'some_key'关联的值(如果存在此值)。如果密钥不存在,则会返回None

答案 2 :(得分:10)

假设some_var是字典,则需要dict.get()

my_var = some_var.get('my_key')

如果缺少None,此结果默认为my_key,但您可以提供其他默认值:

my_var = some_var.get('my_key', default)

答案 3 :(得分:10)

关于.get()方法的好处是你可以实际定义一个值,以便在密钥不存在时返回。

my_dict = { 1: 'one', 2: 'two' }
print my_dict.get(3, 'Undefined key')

会打印。

Undefined key

这不仅有助于调试目的,而且在解析json时也是非常有用的(至少在我的经验中),你应该尽可能地使用get()而不是[]

答案 4 :(得分:2)

try:
    my_var = some_var
except:
    my_var = None

但老实说,这可能并没有触及你想要做的事情的核心......我们需要更多的背景来更全面地回答。

答案 5 :(得分:2)

在python“|”中被翻译为“或”,所以:

my_var = some_var或无

编辑: 您已编辑了初始帖子。做你想做的事的正确方法是:

my_var = some_var.get('my_key', None)

答案 6 :(得分:0)

对于字典:

Inner

对于现有字典:

struct Inner
{
    int N;

    constexpr Inner(int N) : N(N) {}

    constexpr operator int() const { return 2*N; }
};

template <auto val>
struct Outer
{
    enum
    {
        value = val
    };
};

auto a = Outer<Inner(4)>::value;
auto c = Outer<false>::value;
相关问题