Python 中过滤非 None 字典键


Python 字典是以下 4 种数据类型中最流行的一种。字典定义了键值对,并且不允许重复。值可以是字符串或整数。有时,在处理字典时,它会有一些空值,可以使用 None 值来填充。例如,当我们处理机器学习数据集时,会发现某些行是空的,在执行特定任务时,可以使用 None 值来填充。在 Python 中,我们有一些内置函数,如 items() 和 lambda,可以用来过滤 Python 中的非 None 字典键。

让我们来看一个例子:

The given dictionary, {‘A’: 11, ‘B’: None, ‘C’: 29, ‘D’: None}
Then the final result becomes {‘A’: 11, ‘C’: 29}

语法

以下语法在示例中使用:

items()

items() 是 Python 中一个内置方法,允许它遍历字典中的键和值。

lambda

函数 lambda 提供了一种使用 lambda 关键字声明简短匿名函数的快捷方式。lambda 函数的行为与使用 def 关键字声明时相同。

使用字典推导式

该程序设置键和值,通过使用字典推导式将一个字典转换为另一个字典。然后使用名为 items() 的内置函数和条件 if 语句从列表中过滤 None 值。

示例

在下面的示例中,它将使用创建新字典的字典推导式。在 return 语句中,它使用 items() 方法遍历字典中的键值对。然后检查每个键值对,如果值不是 None,则将键值对包含在新字典中。然后创建原始字典以设置其值。接下来,使用调用函数来调用该函数,它被称为递归并将其存储在变量 filtered_dict 中。最后,我们借助变量 filtered_dict 打印结果。

def filter_none(dictionary):
   return {key: value for key, value in dictionary.items() if value is not None}
# Create the dictionary
my_dict = {'a': 10, 'b': None, 'c': 30, 'd': None, 'e': 50}
filtered_dict = filter_none(my_dict)
print("After filter of Non-none dictionary key:\n", filtered_dict)

输出

 After filter of Non-none dictionary key:
 {'a': 10, 'c': 30, 'e': 50}

使用 filter() 函数

该程序使用 filter() 函数,该函数接受两个参数作为内置函数,即 lambda 和 items(),用于过滤 Python 中的非 None 字典键。

示例

在下面的示例中,我们将展示名为 filter() 的内置函数以及 lambda 来从字典中删除值。通常,此返回值函数充当列表推导式。然后它将创建输入字典以设置 none 值,接下来它将使用调用函数传递输入字典并获取结果。

def filter_non_none_dict_filter(dictionary):
   return dict(filter(lambda item: item[1] is not None, dictionary.items()))

my_dict = {'I': 100, 'II': None, 'III': 300, 'IV': None, 'V': None}
filtered_dict = filter_non_none_dict_filter(my_dict)
print("After the filter of Non-none dictionary key:\n", filtered_dict)

输出

 After the filter of Non-none dictionary key:
 {'I': 100, 'III': 300}

使用 for 循环和字典

该程序使用 for 循环迭代字典项的键和值,并使用 if 语句根据 None 检查条件,这将过滤 Python 中的非 None 字典键。

示例

在下面的示例中,从名为 filter_dict_loop 的函数开始程序,该函数接受名为 dictionary 的参数以接收其值。然后在变量 filter_dict 中创建空字典,该变量将仅存储键的整数值。现在使用 for 循环,该循环使用方法 items() 迭代字典的键和值。使用 if 语句,它将检查是否发现值为 none,然后它将自动从字典中删除 key : value。接下来,返回函数。继续创建包含键中整数和 none 值组合的字典,并将其存储在变量 my_dict 中。函数调用用于调用函数以将参数作为名为 f_dict 的变量传递。最后,我们借助变量 f_dict 打印结果。

def filter_dict_loop(dictionary):
   filtered_dict = {}
   for key, value in dictionary.items():
      if value is not None:
         filtered_dict[key] = value
   return filtered_dict
# Create the dictionary 
my_dict = {'A': 91, 'B': None, 'C': 33, 'D': 78, 'E': 5}
f_dict = filter_dict_loop(my_dict)
print("After the filter of Non-none dictionary key:\n", f_dict)

输出

After the filter of Non-none dictionary key:
 {'A': 91, 'C': 33, 'D': 78, 'E': 5}

使用带有条件三元表达式的字典推导式

该程序使用字典推导式将原始字典转换为过滤后的字典,条件三元表达式是在一行中编写 if-else 语句的一种方式。它通常用于字典推导式中以有条件地包含键值对。

示例

在下面的示例中,通过定义一个名为 filter_dict_conditional 的递归函数开始程序,该函数接受字典参数以访问其所有键和值元素。然后它通过删除非 None 字典键来返回函数。接下来,它将创建字典以设置键及其值,并将其存储在变量 my_dict 中。现在使用调用函数将参数作为名为 my_dict 的变量传递,并将其存储在变量 filtered_dict 中。最后,借助变量 filtered_dict 打印结果。

def filter_dict_conditional(dictionary):
   return {key: value for key, value in dictionary.items() if value if not None}

my_dict = {'ABC': 11, 'DEF': None, 'GHI': 13, 'JKL': None, 'MNO': 15}
filtered_dict = filter_dict_conditional(my_dict)
print("After the filter of Non-none dictionary key:\n", filtered_dict)

输出

 After the filter of Non-none dictionary key:
 {'ABC': 11, 'GHI': 13, 'MNO': 15}

结论

我们讨论了理解 Python 中非 None 字典键过滤的各种方法。可以使用 items()、lambda 和 filter() 等各种内置方法来删除非 None 值。此程序涉及机器学习数据集的实际示例,通过根据字典提供特定条件,将空数据值填充为 none。

更新于: 2023-07-17

456 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告