Return None if Dictionary key is not available
我需要一种方法来获取字典值(如果它的键存在),或者简单地返回
但是,如果搜索不存在的键,python会引发
您可以使用
1 | value = d.get(key) |
号
如果
1 | value = d.get(key,"empty") |
再也不奇怪了。它内置于语言中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> help(dict) Help on class dict in module builtins: class dict(object) | dict() -> new empty dictionary | dict(mapping) -> new dictionary initialized from a mapping object's | (key, value) pairs ... | | get(...) | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. | ... |
。
使用
您应该使用
1 2 | d = {} r = d.get( 'missing_key', None ) |
这将导致
如果需要更透明的解决方案,可以将
1 2 3 4 5 6 7 8 9 10 11 | class NoneDict(dict): def __getitem__(self, key): return dict.get(self, key) >>> foo = NoneDict([(1,"asdf"), (2,"qwerty")]) >>> foo[1] 'asdf' >>> foo[2] 'qwerty' >>> foo[3] is None True |
。
对于这种情况,我通常使用默认的dict。您提供了一个不带参数的工厂方法,并在它看到新键时创建一个值。当您想要返回一些新键上的空列表(参见示例)时,它更有用。
1 2 3 | from collections import defaultdict d = defaultdict(lambda: None) print d['new_key'] # prints 'None' |
。
您可以使用
1 2 3 4 | try: <to do something with d[key]> except KeyError: <deal with it not being there> |
这被认为是处理此案的一种非常"Python式"的方法。
一线解决方案是:
1 | item['key'] if 'key' in item else None |
。
当尝试将字典值添加到新列表并希望提供默认值时,此选项非常有用:
如。
1 | row = [item['key'] if 'key' in item else 'default_value'] |
号
正如上面其他人所说,您可以使用get()。
但要检查钥匙,您还可以执行以下操作:
1 2 3 4 5 6 7 8 9 10 | d = {} if 'keyname' in d: # d['keyname'] exists pass else: # d['keyname'] does not exist pass |
您可以通过子类化dict来重写
1 2 3 | class MyDict(dict): def __missing__(self, key): return None |
如果您可以使用
1 2 3 | e=dict() hasattr(e, 'message'): >>> False |
。