从存在的第一个键的字典中获取值
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)
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)