首页 > 解决方案 > 从字典中过滤偶数和奇数值并将这些偶数和奇数值添加到列表中并将它们写入 txt 文件

问题描述

代码:

def even_odd_split(Dic1):
    even = []
    odd =  []
    for sublist in Dic1.values():
        for x in sublist:
            if x % 2 == 0:
            even.append(x)
            else:
            odd.append(x)
    return even, 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]
     }

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

     with open("odd.txt","w") as f:
             f.write(str(odd))

     with open("even.txt","w") as f:
             f.write(str(even))

错误:未定义名称“奇数”

是否因为它在列表中为空而未找到,但我添加了偶数和奇数。我不明白你为什么给出这样的错误。我该如何解决错误?

标签: pythonlistdictionarytxt

解决方案


变量有一个范围。如果它们在方法中,则在方法完成后变量就消失了。这就是为什么你的return东西。

在调用方法的地方,您可以将方法的结果分配给新变量。

由于您返回一个元组,因此您可以在分配中有 2 个变量:

x, y = even_odd_split(Dic1)

或者,如果您想再次使用相同的名称

even, odd = even_odd_split(Dic1)

这是完整的代码。仔细阅读并尝试了解名称的全部含义。请注意,它们在方法内部和外部是不同的。

def even_odd_split(numbers):
    even_numbers = []
    odd_numbers = []
    for sublist in numbers.values():
        for x in sublist:
            if x % 2 == 0:
                even_numbers.append(x)
            else:
                odd_numbers.append(x)
    return even_numbers, odd_numbers


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]
        }

even, odd = even_odd_split(Dic1)
print(f'Even items: {even}\nOdd items: {odd}')

with open("odd.txt", "w") as f:
    f.write(str(odd))

with open("even.txt", "w") as f:
    f.write(str(even))

推荐阅读