从存在的第一个键的字典中获取值

Get value from dictionary for first key that exists

TL;DR

是否有 Python 字典方法或简单表达式 return 是字典中存在的第一个键(来自可能键列表)的值?

详情

假设我有一个包含许多键值对的 Python 字典。不保证任何特定密钥的存在。

d = {'A':1, 'B':2, 'D':4}

如果我想获取给定键的值,并且 return 一些其他默认值(例如 None)如果该键不存在,我只需这样做:

my_value = d.get('C', None) # Returns None

但是如果我想在默认为最终默认值之前检查一些可能的键怎么办?一种方法是:

my_value = d.get('C', d.get('E', d.get('B', None))) # Returns 2

但是随着备用键数量的增加,这变得相当复杂。

是否存在适用于此场景的 Python 函数?我想是这样的:

d.get_from_first_key_that_exists(('C', 'E', 'B'), None) # Should return 2

如果没有这样的方法,有没有简单的表达方式在这种情况下常用?

你可以这样做

dict_keys=yourdict.keys()
expected_keys=['a','b','c']

result= list(set(dict_keys).intersection(set(expected_keys)))
if result:
    for i in expected_keys:
        if i in result:
            yourdict.get(i)

什么都不存在。

x = ["1", "3"]
d = {'1': 1, '2': 2, '3': 3}
d[[k for k in x if x in d][0]]

只需使用列表理解。

编辑:奖励积分:

all_matches = [d[k] for k in x if x in d]
all_matches[0]

如果你想要所有可能的键(如果你不想要,效率很低)

使用普通的for循环,流控最清晰:

for k in 'CEB':
    try:
        v = d[k]
    except KeyError:
        pass
    else:
        break
else:
    v = None

如果你想把它写成一行,可以使用类似理解的语法:

v = next((d[k] for k in 'CEB' if k in d), None)