如何使用运算符'and'和/或'or'映射两个过滤列表

madik_atma

我有以下两个列表:

advanced_filtered_list_val1 = [row for row in cleaned_list if float(row[val1]) < wert1]

advanced_filtered_list_val2 = [row for row in cleaned_list if float(row[val2]) < wert2]

如何使用选项and和/或or将映射的列表映射到列表中?

列表中的数据是字典,我搜索和过滤列表中的某些行。我想过滤两个值。这很好。但是,现在如何将其映射到列表中进行过滤?

我尝试了以下操作:

select = int(input())

#and operation
if select == 1:
    mapped_list = [row for row in advanced_filtered_list_val1 and advanced_filtered_list_val2]
    for x in mapped_list:
        print(x)
#or operation
if select == 2:
    mapped_list = [row for row in advanced_filtered_list_val1 or advanced_filtered_list_val2]
    for x in mapped_list:
        print(x)

我按如下所示导入数据:

faelle = [{k: v for k, v in row.items()}


for row in csv.DictReader(csvfile, delimiter=";")]

我现在要从wert1wert2wert1过滤wert2那意味着在and子句上它应该在两个过滤器上true,在or子句上它应该是wert1或之一wert2 True

活着

您要过滤包含cleaned_list两个wert类似条件(AND)或其中至少一个(OR)的字典你能做的是

import operator as op
ineq_1    = 'gt'
ineq_2    = 'lt'
select    = 2
andor = {
    1:lambda L: filter(
        lambda d: getattr(op,ineq_1)(float(d[val1]), wert1)
                  and getattr(op,ineq_2)(float(d[val2]), wert2),
        L
    ),
    2:lambda L: filter(
        lambda d: getattr(op,ineq_1)(float(d[val1]), wert1)
                  or getattr(op,ineq_2)(float(d[val2]), wert2),
        L
    ),
}

mapped_list = andor[select](cleaned_list)
for x in mapped_list:
    print(dict(x))

可能的选择是gt(大于),lt(小于)或eq


请注意,通过使用python-builtin模块的方法 and_ or_ 甚至可以使事情更加“动态” operator 例如,

#Where the two following ix2-like stuffs are defined to make
# a correspondence between names one knows, and methods of the
#  module operator.
ix2conj = {
    1:'and_',
    2:'or_',
}
ix2ineq = {
    '<' :'lt',
    '==':'eq',
    '>' :'gt',
}
def my_filter(conjunction, inequality1, inequality2, my_cleaned_list):
    return filter(
        lambda d: getattr(op, ix2conj[conjunction])(
                       getattr(op, ix2ineq[inequality1])(float(d[val1]), wert1),
                       getattr(op, ix2ineq[inequality2])(float(d[val2]), wert2)
                       ),
        my_cleaned_list
        )

ineq_1    = '>'
ineq_2    = '<'
select    = 2
print(my_filter(select, ineq_1, ineq_2, cleaned_list))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用集合在一个运算符中使用映射和过滤方法?

使用 AND 运算符和两个选择?

如何使用 LIKE 和 %% 运算符在 Web 表单中查询和过滤我的数据?

使用Java 8迭代和过滤两个列表

如何使用Q对象和&运算符使用查询集的值进行过滤查询?

如何使用OR和AND运算符为Django创建正确的过滤器字符串?

使用列表切片和“+”运算符如何工作?

如何使用“ AND”和“ OR”运算符搜索字符串中的单词列表?

当两个向量的第一个元素均为负数时,如何对两个整数向量正确使用<和>运算符?

如何使用按位运算符和位操作在C中交换2个整数?

如何使用 django 在一个查询中实现逻辑 AND 和 OR 运算符

使用 $or 运算符和两个嵌套的 $in 条件查找对象

如何对列表的所有元素进行“和”运算符?

使用perl的qx {} /`...`运算符和参数列表

如何使用列表来避免一遍又一遍地重复“和/或”运算符?

如何通过在函数中的列表和浮点数之间使用运算符来返回最小值?

使用or和not运算符

MongoDB正则表达式和运算符-如何通过两个值查找

使用instanceof运算符可以实现两个并行的函数和参数的层次结构吗?

在Java中不使用乘法,除法和mod运算符将两个整数相除

在比较两个可为空的变量时,为什么不使用短路逻辑“和”运算符?

RxJs和Angular,我需要从route读取两个参数,并且我想使用管道运算符

如何使用 '!运算符”和TypeScript中的“ in运算符”?

如何在 SQL 的 WHERE 子句中使用 IN 运算符和 AND 运算符...?

使用运算符+ =对两个变量进行异或运算并将结果添加到第三个变量中,但不能将运算符=和+结合使用

如何根据字符串值和两个日期过滤字典列表

python的拆包运算符*和**如何使用?

如何在IN和NOT IN运算符中使用SearchCriteria API?

如何使用模运算符递增和递减整数