在 python 中使用字典检查键值的最佳方法
Best way to check key value with dictionary in python
我有一本字典,我想将字典的一些索引添加到变量中。
我知道 try except 比 else if 更 pythonic。我尝试了 try except 并且它工作得很好但是我有很多关键要检查而且我无法弄清楚哪个代码更像 pythonic
这是我的字典:
test = {"token":"eating", "stemm": "eat", "lemm": "eat", "pos":"VPP"}
def method_one(test):
try:
token = test["token"]
except KeyError:
token = None
try:
stemm = test["stemm"]
except KeyError:
stemm = None
def method_two(test):
token = None
stemm = None
if "token" in test:
token = test["token"]
if "stemm" in test:
stemm = test["stemm"]
我也试了一次,除了all,但是当一个失败时,我不知道是哪个失败了,所以这个没用。
有没有第三种方法的想法?还是方法一好?
dict
有 get
方法,将 return value
或 None
。你可以做 item = dict.get(key)
并且这将 return
value
(如果 key
存在)或 None
否则,这就是你正在寻找的东西:)
>>> d = {'foo': 'bar'}
>>> d.get('foo')
'bar'
>>> item = d.get('fooo')
>>> item is None
True
有一个直接查找结构,其中创建集合 应该存在于字典中的有效键
test = {"token":"eating", "stemm": "eat", "lemm": "eat", "pos":"VPP"}
def validate(d, valkeys):
keyset = set(test.keys())
if valkeys.issubset(keyset):
return True
else:
return False
if __name__ == "__main__":
val = set(["token", "stemm"])
inval = set(["token", "stemm", "st"])
assert validate(test, val) == True
assert validate(test, inval) == False
我有一本字典,我想将字典的一些索引添加到变量中。
我知道 try except 比 else if 更 pythonic。我尝试了 try except 并且它工作得很好但是我有很多关键要检查而且我无法弄清楚哪个代码更像 pythonic
这是我的字典:
test = {"token":"eating", "stemm": "eat", "lemm": "eat", "pos":"VPP"}
def method_one(test):
try:
token = test["token"]
except KeyError:
token = None
try:
stemm = test["stemm"]
except KeyError:
stemm = None
def method_two(test):
token = None
stemm = None
if "token" in test:
token = test["token"]
if "stemm" in test:
stemm = test["stemm"]
我也试了一次,除了all,但是当一个失败时,我不知道是哪个失败了,所以这个没用。
有没有第三种方法的想法?还是方法一好?
dict
有 get
方法,将 return value
或 None
。你可以做 item = dict.get(key)
并且这将 return
value
(如果 key
存在)或 None
否则,这就是你正在寻找的东西:)
>>> d = {'foo': 'bar'}
>>> d.get('foo')
'bar'
>>> item = d.get('fooo')
>>> item is None
True
有一个直接查找结构,其中创建集合 应该存在于字典中的有效键
test = {"token":"eating", "stemm": "eat", "lemm": "eat", "pos":"VPP"}
def validate(d, valkeys):
keyset = set(test.keys())
if valkeys.issubset(keyset):
return True
else:
return False
if __name__ == "__main__":
val = set(["token", "stemm"])
inval = set(["token", "stemm", "st"])
assert validate(test, val) == True
assert validate(test, inval) == False