从Python出现的键列表中获取字典中的第一个值

时间:2019-05-24 20:59:25

标签: python

我有一个列表,可能是或不是字典中的键。物品有订单。因此,我想从头到尾搜索词典中的内容。出现在字典中的第一个是我想要的值。如果那里什么也没有,我要没有。

我想要一个干净的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()

但是第二个仅在我初始化密钥时才有效。

有人有更简单的方法吗?

3 个答案:

答案 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