我有一个列表,可能是或不是字典中的键。物品有订单。因此,我想从头到尾搜索词典中的内容。出现在字典中的第一个是我想要的值。如果那里什么也没有,我要没有。
我想要一个干净的pythonic内衬,因为它应该很简单。我考虑过类似的事情(但语法不起作用):
value = dictionary.get(key) for key in list_of_keys while value == None
或与其他人一起
value = dictionary.get(key) if key in dictionary or list_of_keys == [] else key = list_of_keys.pop()
但是第二个仅在我初始化密钥时才有效。
有人有更简单的方法吗?
答案 0 :(得分:3)
您可以尝试以下方法:
value = next((dictionary[key] for key in list_of_keys if key in dictionary), None)
说明:
(dictionary[key] for key in list_of_keys if key in dictionary)
将创建一个python生成器。
通过使用next
,当找到第一个有效密钥时,它将停止遍历python生成器。如果生成器为空,它将返回第二个参数作为默认值,在这种情况下为None
。
答案 1 :(得分:1)
value = [dictionary.get(key) for key in list_of_keys if key in dictionary][0]
只要字典在list_of_keys中至少包含一个键,该键就会起作用。它列出list_of_keys中每个键的值的列表,然后[0]仅输出第一个。
测试:
dictionary=dict(tom=9, bob=8, rose=4)
list_of_keys=['harry', 'sam', 'bob']
value = [dictionary.get(key) for key in list_of_keys if key in dictionary][0]
print(value)
8
答案 2 :(得分:0)
具有线性时间复杂度的简单解决方案是-
d = dict()
# define your dict here
for k in list_of_keys:
val = d.get(k, None) # you could also use try-except
if val:
print(val)
break