检查字典中备用键的更好方法
我正在处理一个字典,这个字典可能在四个不同的键下有我想要的值(我无法控制这个字典的内容)。
这些键可能是 "value"
、"_value"
、"amount"
或 "_amount"
。
目前我唯一想到的办法是
try:
val = myDict["value"]
except KeyError:
try:
val = myDict["_value"]
except KeyError:
try:
val = myDict["amount"]
except KeyError:
val = myDict["_amount"]
但是光是看着这个我就觉得头疼。有没有更好的办法呢?
3 个回答
-1
伪代码(如果你只是想检查某个值是否存在):
- 先获取字典里的所有值,代码是:values = myDict.values()
- 检查这个值是否在获取到的值里面
- 接下来就可以根据你的需求来写逻辑了
Python代码:
values = myDict.values()
if value in values:
#your logic
伪代码(如果你只是想在值存在的情况下获取对应的键):
- 先用 keys = myDict.keys() 和之前的值来获取键和值
- 找到这个值的索引
- 然后用这个索引获取对应的键,代码是:key = myDict['index_of_value']
Python代码:
keys = myDict.keys()
values = myDict.values()
if value in values:
index_of_value = values.index(value)
key = keys[index_of_value]
1
def tryMultipleKeys(myDict, keysToCheck):
for key in keysToCheck :
if key in myDict :
return myDict[key]
return None
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
1
我来回答我自己的问题,分享一下我最后选择的方案。
我决定写一个函数来尝试多个键,这样比起嵌套的 .get()
调用,更容易阅读。
def tryMultipleKeys(myDict, keysToCheck):
val = None
for k in keysToCheck:
val = myDict.get(k)
if val is not None:
break
else:
raise KeyError(f"None of the keys ({keysToCheck}) were found in {myDict}")
return val