如何将列表按数据类型拆分并生成对应字典?
按数据类型分组列表元素生成字典
先看示例:
输入列表:
input_list = [False, 333, 234.234, 'ert5rr']
目标输出字典:
{ 'bool': [False], 'str': ['ert5rr'], 'float': [234.234], 'int': [333], }
下面是两种实用的实现方式:
方法一:基础循环手动实现
这种方式逻辑清晰,适合新手理解,也方便按需扩展类型判断:
input_list = [False, 333, 234.234, 'ert5rr'] result = {} for item in input_list: # 重点:先判断布尔类型,因为bool是int的子类,不优先判断会被归为int if isinstance(item, bool): key = 'bool' elif isinstance(item, int): key = 'int' elif isinstance(item, float): key = 'float' elif isinstance(item, str): key = 'str' # 可以在这里添加更多类型的判断,比如list、dict、tuple等 else: # 其他未知类型直接取类型名称作为键 key = type(item).__name__ # 初始化键对应的列表,再添加元素 if key not in result: result[key] = [] result[key].append(item) print(result)
方法二:用collections.defaultdict简化代码
如果不想手动处理列表初始化,可以用defaultdict来简化,代码更简洁:
from collections import defaultdict input_list = [False, 333, 234.234, 'ert5rr'] result = defaultdict(list) for item in input_list: if isinstance(item, bool): key = 'bool' else: # 除了bool,其他类型直接取类型名 key = type(item).__name__ result[key].append(item) # 可选:把defaultdict转为普通字典 result = dict(result) print(result)
关键注意事项
- 布尔类型
bool是int的子类,isinstance(False, int)会返回True,所以必须先判断bool类型,否则False会被错误分到'int'组里。 - 如果需要支持更多数据类型,要么在判断分支里添加对应逻辑,要么直接用
type(item).__name__自动适配所有类型。
内容的提问来源于stack exchange,提问作者Trijk
相关产品推荐
相关产品推荐

