例如,我有一个像这样的词典列表:
[{'name':'Mike', 'hobby':'skiing', 'job':'doctor'}, {'name':'Steve', 'hobby':'skiing', 'job':'doctor'}, {'name':'Sally', 'hobby':'chess', 'job':'teacher'} ]
我希望搜索所有与键'hobby'
和'job'
具有相同值的词典。例如'hobby':'skiing'
,'job':'doctor'
。输出应为:
[{'name':'Mike', 'hobby':'skiing', 'job':'doctor'}, {'name':'Steve', 'hobby':'skiing', 'job':'doctor'}]
我的代码看起来像这样:
name=raw_input('Name: ')
hobby=raw_input('Hobby: ')
job= raw_input('Job: ')
def first_searsh(input, key):
out = []
for item in list:
if item[key] == input:
out.append(item)
return out
我已为所有键编写了单独的函数,如下所示:
def name_search():
if name != "":
out_1 = first_search(name, 'name')
else:
pass
return out_1
我的真实词典有10个键,我不知道如何连接这些单独的搜索功能,以便输出只显示具有所有相同值的词典,而不是所有输入任何值的词典
答案 0 :(得分:1)
x = [{'name':'Mike', 'hobby':'skiing', 'job':'doctor'}, {'name':'Steve', 'hobby':'skiing', 'job':'doctor'}, {'name':'Sally', 'hobby':'chess', 'job':'teacher'} ]
hobby = 'skiing'
job = 'doctor'
result = [i for i in x if i['hobby'] == hobby and i['job'] == job]
print(result)
打印:
[{'hobby': 'skiing', 'job': 'doctor', 'name': 'Mike'},
{'hobby': 'skiing', 'job': 'doctor', 'name': 'Steve'}]
或更通用的解决方案:
def search_for(d, lst):
return [i for i in lst if all(i[target_key] == target_value for target_key, target_value in d.items())]
dict_to_search_for = {
'hobby':'skiing',
'job':'doctor'
}
lst = [{'name':'Mike', 'hobby':'skiing', 'job':'doctor'}, {'name':'Steve', 'hobby':'skiing', 'job':'doctor'}, {'name':'Sally', 'hobby':'chess', 'job':'teacher'} ]
search_for(dict_to_search_for, lst)
dict_to_search_for
是一个包含您要匹配的键值组合的字典。
lst
是您的清单
search_for
将字典和列表作为参数。
[i for i in lst if all(i[target_key] == target_value for target_key, target_value in d.items())]
是list comprehension,用于收集lst
中与您的键值组合all
匹配的每个词典。
答案 1 :(得分:0)
可能有更多Pythonic方法可以做到这一点,但只需遍历列表以匹配键:值对工作,使用'和'指定必须满足工作和业余条件。
如果某个项目是匹配项,请将其附加到新列表中,并将Bob附加到您的叔叔身上。
lst = [{'name':'Mike', 'hobby':'skiing', 'job':'doctor'}, {'name':'Steve',
'hobby':'skiing', 'job':'doctor'}, {'name':'Sally', 'hobby':'chess',
'job':'teacher'} ]
lst2 = []
for item in lst:
if item['hobby'] == 'skiing' and item['job'] == 'doctor':
lst2.append(item)
print lst2