Python:如何检查密钥是否存在,并以降序优先级从Dictionary中检索值

Cry*_*sie 21 python dictionary key-value

我有一本字典,我想根据一些键从中获取一些值.例如,我有一个字典,用户的名字,姓氏,用户名,地址,年龄等.比方说,我只想获得一个值(名称) - 姓氏或名字或用户名,但优先顺序如下所示:

(1)姓氏:如果密钥存在,获取值并停止检查.如果没有,请转到下一个键.

(2)名字:如果密钥存在,获取值并停止检查.如果没有,请转到下一个键.

(3)username:如果key存在,则获取值或返回null/empty

#my dict looks something like this
myDict = {'age': ['value'], 'address': ['value1, value2'],
          'firstName': ['value'], 'lastName': ['']}

#List of keys I want to check in descending priority: lastName > firstName > userName
keySet = ['lastName', 'firstName', 'userName']
Run Code Online (Sandbox Code Playgroud)

我尝试做的是获取所有可能的值并将它们放入列表中,以便我可以检索列表中的第一个元素.显然它没有成功.

tempList = []

for key in keys:
    get_value = myDict.get(key)
    tempList .append(get_value)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,而不使用if else块?

Pet*_*per 28

如果键的数量很小,一个选项是使用链式获取:

value = myDict.get('lastName', myDict.get('firstName', myDict.get('userName')))
Run Code Online (Sandbox Code Playgroud)

但是如果你定义了keySet,这可能更清楚:

value = None
for key in keySet:
    if key in myDict:
        value = myDict[key]
        break
Run Code Online (Sandbox Code Playgroud)

链接的gets不会短路,因此将检查所有密钥,但只使用一个密钥.如果您有足够的可能密钥,请使用for循环.

  • `get`采用可选的第二个参数.如果键不在字典中,则返回第二个参数,如果未指定,则返回"None".因此,如果`lastName`不在dict中,它将评估第二个`get`,依此类推. (3认同)

Ter*_*ryA 15

使用.get(),如果找不到密钥,则返回None.

for i in keySet:
    temp = myDict.get(i)
    if temp is not None:
        print temp
        break
Run Code Online (Sandbox Code Playgroud)