我有两个清单。
一个词典列表。 另一个列表,但有纯字符串(我解析它,所以提取字典匹配键)
例如:
词典列表如下所示:
list1 = [{'name':'foo', 'age':'12'},{'name':'bar','age':'12'},{'name':'alex','age':13}]
然后我有第二个列表看起来像这样
filters_list = ['name=foo', 'age=12']
我想遍历第一个列表;然后创建一个空列表,然后附加每个匹配的项目。
在这种情况下;
我会得到所有的名字'foo'和年龄'13'因此这将从第一个列表中返回2个项目,也就是list1
这是我到目前为止的尝试
for items in list1: # main array of dictionaries
for filters in filters_list: #second array with payloat formatted string.
keys = filters.split('=')[0]
values = filters.split('=')[-1]
if str(values.strip()) == str(items[keys].replace('$','')):
outputArr.append(items)
return outputArr
这不能正常工作。
答案 0 :(得分:4)
>>> arr = [{'name':'foo', 'age':'12'},{'name':'bar','age':'12'},{'name':'alex','age':13}]
>>> filters_arr = ['name=foo', 'age=12']
>>> filters_tuples = [f.split('=') for f in filters_arr]
>>> [item for item in arr if any(item[k] == v for k, v in filters_tuples)]
[{'name': 'foo', 'age': '12'}, {'name': 'bar', 'age': '12'}]
或者如果您想匹配all
过滤器,那么:
>>> [item for item in arr if all(item[k] == v for k, v in filters_tuples)]
[{'name': 'foo', 'age': '12'}]
答案 1 :(得分:0)
这是一个简单易用的简单代码:
list1 = [{'name':'foo', 'age':'12'},{'name':'bar','age':'12'},{'name':'alex','age':13}]
filters_list = ['name=foo', 'age=12']
output = list()
for dic in list1:
should_be_added = False
for filter_ in filters_list:
key = filter_.split('=')[0]
value = filter_.split('=')[-1]
if dic[key] == value:
should_be_added = True
if should_be_added:
output.append(dic)
print(output)