检查字典中备用键的更好方法

-2 投票
3 回答
51 浏览
提问于 2025-04-14 17:48

我正在处理一个字典,这个字典可能在四个不同的键下有我想要的值(我无法控制这个字典的内容)。

这些键可能是 "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

伪代码(如果你只是想检查某个值是否存在):

  1. 先获取字典里的所有值,代码是:values = myDict.values()
  2. 检查这个值是否在获取到的值里面
  3. 接下来就可以根据你的需求来写逻辑了

Python代码:

values = myDict.values()
if value in values:
   #your logic

伪代码(如果你只是想在值存在的情况下获取对应的键):

  1. 先用 keys = myDict.keys() 和之前的值来获取键和值
  2. 找到这个值的索引
  3. 然后用这个索引获取对应的键,代码是: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

撰写回答