在Python中,最有效的方法是:
my_var = some_var['my_key'] | None
即。如果some_var['my_key']
包含my_var
,请将some_var
分配给'my_key'
,否则将my_var
设为None
。
答案 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;