在 Python 中如何实现类似 PHP array_column 函数的功能?

python 中高效模拟 php array_column 函数

python 中,处理嵌套列表并提取特定列的数据是常见需求。本文将展示如何高效地模拟 PHP 的 array_column 函数功能,并提供两种实现方式:一种用于提取单列数据,另一种用于构建键值对字典。

在 Python 中如何实现类似 PHP array_column 函数的功能?

场景: 假设我们有一个包含字典的列表:

nested_list = [     {'id': 1, 'name': 'Alice', 'age': 25},     {'id': 2, 'name': 'Bob', 'age': 30},     {'id': 3, 'name': 'Charlie', 'age': 35}, ]

我们需要从中提取所有 id 列的值,或者创建一个新的字典,以某个字段的值作为键,另一个字段的值作为值。

立即学习PHP免费学习笔记(深入)”;

方法一:提取单列数据

此函数从列表中提取指定列名的所有值,返回一个列表:

def extract_column(data, column_name):     """     从列表中提取指定列名的所有值。      Args:         data: 包含字典的列表。         column_name: 要提取的列名。      Returns:         包含提取值的列表。  如果输入数据无效,返回空列表。     """     try:         return [item[column_name] for item in data]     except (KeyError, TypeError):         return [] # 处理异常情况,例如列名不存在或数据类型错误 

方法二:构建键值对字典

此函数从列表中提取指定键名和值名的列,构建一个字典:

def extract_column_to_dict(data, key_column_name, value_column_name):     """     从列表中提取指定键名和值名的列,构建一个字典。      Args:         data: 包含字典的列表。         key_column_name: 键名对应的列名。         value_column_name: 值对应的列名。      Returns:         包含提取键值对的字典。如果输入数据无效,返回空字典。     """     try:         return {item[key_column_name]: item[value_column_name] for item in data}     except (KeyError, TypeError):         return {} # 处理异常情况 

使用方法:

data = [     {'id': 1, 'name': 'Alice', 'age': 25},     {'id': 2, 'name': 'Bob', 'age': 30},     {'id': 3, 'name': 'Charlie', 'age': 35}, ]  names = extract_column(data, 'name') print(f"Names: {names}")  # 输出:Names: ['Alice', 'Bob', 'Charlie']  id_name_dict = extract_column_to_dict(data, 'id', 'name') print(f"ID-Name Dictionary: {id_name_dict}")  # 输出:ID-Name Dictionary: {1: 'Alice', 2: 'Bob', 3: 'Charlie'}  #处理异常情况 empty_result = extract_column(data, 'nonexistent_column') print(f"Empty Result: {empty_result}") # 输出:Empty Result: []  invalid_data = [1,2,3] invalid_result = extract_column(invalid_data, 'name') print(f"Invalid Data Result: {invalid_result}") # 输出:Invalid Data Result: []

这两个函数提供了灵活且健壮的方案,可以有效地模拟 PHP array_column 函数的功能,并优雅地处理潜在的错误。 它们比简单的列表推导式更具容错性,能够更好地处理各种输入情况。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享