【问题标题】:filter even and odd values from a dictionary and add these even and odd values to lists.in python从字典中过滤偶数和奇数并将这些偶数和奇数添加到lists.in python
【发布时间】:2021-08-11 11:14:18
【问题描述】:

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

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: []

【问题讨论】:

    标签: python list dictionary txt


    【解决方案1】:

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

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

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

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

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

    可能不要对函数名使用正确的大小写; Python 约定是将类名大写,但对常规函数和变量使用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。

    【讨论】:

      猜你喜欢
      • 2021-08-12
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多