#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-строку.