我有一个字典,并且知道该字典中只有N个键之一。该任务是查找并保存现有键的值。
我编写了以下蛮力代码,但我相信应该有一个不错的oneliner之类的东西:
final_key = None
for key in ['aa', 'bbb', 'cccc', 'ddddd', 'e']:
if key in dict:
final_key = key
break
答案 0 :(得分:3)
您可以通过设置操作来做到这一点:
set(dict).intersection(['aa', 'bbb', 'cccc', 'ddddd', 'e'])
答案 1 :(得分:2)
您可以尝试以下操作:
next(x in your_list if x in dict)
它会生成一个迭代器,并且只会找到它的第一个元素。
答案 2 :(得分:1)
该代码段遍历字典键,并返回给定列表中包含的键。
next(
x for x in
dictionary.keys()
if x in ['aa', 'bbb', 'cccc', 'ddddd', 'e']
)
答案 3 :(得分:1)
只是为了回答答案,但这绝不是一个好方法。
try:
dict[key]
except KeyError:
print("Key doesn't exist")
答案 4 :(得分:0)
您还可以将filter
和get
方法一起使用,以找到字典的键:
final_key = list(filter(lambda key: not dict.get(key,None) is None, ['aa', 'bbb', 'cccc', 'ddddd', 'e']))[0]
注意:您不应使用dict
作为变量名,因为它是Python的保留关键字。
答案 5 :(得分:0)
没有if语句?请尝试以下操作:
i = 0
while yourlist[i] not in yourdict: i+=1
final_key = yourlist[i]
答案 6 :(得分:0)
在python3中非常简单
dict.__contains__('your key here')
和python2
dict.has_key('your key here')
它将为您提供True或False
答案 7 :(得分:0)
考虑传统的,已记录的干净功能:
def find_first(candidates, collection):
"""Find the first element of candidates also in collection"""
for k in candidates:
if k in collection: return k
return None # or raise a KeyNotFound exception!
或一些(未经测试的)单缸纸,例如:
next(set(candidates).intersection(set(collection))
您想在一年内调试哪个代码?如果速度太慢(单线速度可能慢几倍),您更想优化。