отфильтруйте четные и нечетные значения из словаря и добавьте эти четные и нечетные значения в lists.in python

#python #list #dictionary #txt

Вопрос:

Я хочу отфильтровать четные и нечетные значения из словаря. Я пытался добавить эти четные и нечетные значения в списки, но я продолжаю получать пустой вывод, почему? Мой код выглядит так:

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

Ответ №1:

ele is 2 == 0 на самом деле это совсем не правильный способ выразить это. is Оператор проверяет, относятся ли две переменные к одному и тому же объекту; сравнение этого значения истинности ( True или False ) с 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: %snOdd items%s' % even_odd_split(Dic1))
 

Возможно, обратите внимание, что % это также — несколько сбивающе — оператор форматирования, когда его первым аргументом является строка. Это пример перегрузки операторов; хотя современный Python, возможно, предпочел бы, чтобы вы использовали .format() здесь или f-строку.