从字典中过滤偶数和奇数并将这些偶数和奇数添加到 lists.in python

filter even and odd values from a dictionary and add these even and odd values to lists.in python

我想从字典中过滤偶数和奇数值。我试图将这些偶数和奇数值添加到列表中,但我一直得到空输出,为什么?我的代码是这样的:

def Split(Dic1):
    even = [ele for ele in Dic1.values() if ele is 2 ==0]
    odd  = [ele for ele in Dic1.values() if ele is 2 !=0]
    print("Even lists:", even)
    print("Odd lists:", odd)

 Dic1  = {"N1": [1, 3, 7, 6, 10],
    "N2": [2, 3, 9, 10, 21, 36],
    "N3": [4, 6, 5, 12, 24, 35],
    "N4": [0, 3, 14, 15, 16, 18]
  }
  Split(Dic1)

输出:

Even lists: []
Odd lists: []

ele is 2 == 0 根本不是正确的表达方式。 is 运算符检查两个变量是否引用同一个对象;将此真值(TrueFalse)与 0 进行比较基本上是 if False == False 但这显然不是您要检查的内容。

检查某物是否可整除的运算符称为 modulo,在 Python 中拼写为 %.

遍历输入列表两次似乎不够优雅;您可能应该只循环一次,然后选择将每个值复制到哪个新列表。

您的函数不应尝试修改全局变量。相反,使它成为 return 两个新列表,并让调用者决定如何处理结果(在这里,打印它)。

您输入的字典的 values() 不是数字,因此您不能直接在循环中使用它们。为每个键拆分出单独的值,或者更改函数以期望列表列表来自 values().

函数名可能不使用 Proper Case; Python 约定是将 class 名称大写,但对常规函数和变量使用 snake_case

def even_odd_split(Dic1):
    even = []
    odd = []
    for sublist in Dic1.values():
        for ele in sublist:
            if ele % 2 == 0:
                even.append(ele)
            else:
                odd.append(ele)
    return even, odd

print('Even items: %s\nOdd items%s' % even_odd_split(Dic1))

也许注意到 % 在其第一个参数是字符串时也是 - 有点令人困惑 - 格式化运算符。这是运算符重载的一个例子;尽管现代 Python 可能更喜欢您在此处使用 .format() 或 f-string。