我有一个字典列表,我想查找列表中是否有值,如果存在,则返回字典。 例如
Mylist= [{'Stringa': "ABC",
'Stringb': "DE",
'val': 5},
{'Stringa': "DEF",
'Stringb': "GHI",
'val': 6}]
我想查找是否为任何词典
字典[ “stringa”] == “ABC”。如果是,则返回相应的字典。 我使用了“any”函数
any(d['Stringa'] == 'ABC' for d in Mylist)
但它只给出了True / False。我怎样才能获得相应的字典。
答案 0 :(得分:2)
使用next()
:
d = next((d for d in Mylist if d['Stringa'] == 'ABC'), None)
if d is not None: # found
print(d)
请参阅Python: find first element in a sequence that matches a predicate。
答案 1 :(得分:1)
any
将检查迭代中的任何项是否满足条件。它不能用于检索匹配的项目。
使用列表推导来获取匹配项的列表,例如
matches = [d for d in Mylist if d['Stringa'] == 'ABC']
这将遍历字典列表,每当找到匹配项时,它都会在结果列表中包含该字典。然后,您可以使用列表中的索引访问实际字典,例如matches[0]
。
或者,您可以使用生成器表达式,如此
matches = (d for d in Mylist if d['Stringa'] == 'ABC')
您可以使用
从列表中获取下一个匹配的项目actual_dict = next(matches)
这将为您提供实际的字典。如果要获取下一个匹配项,可以再次使用生成器表达式调用next
。如果您希望一次性获取所有匹配的项目,则只需执行
list_of_matches = list(matches)
注意:如果没有其他项目要从生成器中检索,则调用next()
将引发异常。因此,您可以传递要返回的默认值。
actual_dict = next(matches, None)
现在,如果生成器耗尽,actual_dict
将为None
。
答案 2 :(得分:1)
这是另一个选项,它可以让您更灵活:
def search_things(haystack, needle, value):
for i in haystack:
if i.get(needle) == value:
return i
return None # Not needed, None is returned by default
# you can use this to return some other default value
found = search_things(MyList, 'StringA', 'ABC')
if found:
print('Found it! {}'.format(found))
else:
print('Not found')