迭代两个列表;然后在数组中比较/追加结果

时间:2018-02-10 08:16:39

标签: python

我有两个清单。

一个词典列表。 另一个列表,但有纯字符串(我解析它,所以提取字典匹配键)

例如:

词典列表如下所示:

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

这不能正常工作。

2 个答案:

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