You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取CSV转字典并转换布尔字符串:如何实现更Pythonic的写法?

更Pythonic的CSV转字典并转换布尔值实现方案

问题描述

现有一段可正常运行的代码,能够读取CSV文件数据并将其转换为Python字典,同时将True、false这类布尔字符串转换为对应的布尔类型,希望优化为更符合Python风格的写法:

def _load_metadata(path):
    """Loads the metadata from the given file and converts boolean strings to booleans."""
    filedict = {}
    with open(path) as csvfile:
        reader = csv.DictReader(csvfile, delimiter=",")
        for row in reader:
            newrow = {}
            for key, value in dict(row).items():
                if value.lower() == "false":
                    newrow[key] = False
                elif value.lower() == "true":
                    newrow[key] = True
                else:
                    newrow[key] = value
            filedict[row["name"]]= newrow 
    return filedict

优化后的Pythonic实现

import csv

def _load_metadata(path):
    """Loads the metadata from the given file and converts boolean strings to booleans."""
    # 定义布尔字符串到布尔值的映射,可扩展其他转换规则
    bool_mapping = {"true": True, "false": False}
    
    with open(path) as csvfile:
        reader = csv.DictReader(csvfile, delimiter=",")
        # 嵌套字典推导式直接构建结果
        return {
            row["name"]: {
                key: bool_mapping.get(value.lower(), value)
                for key, value in row.items()
            }
            for row in reader
        }

优化点说明

  • 嵌套字典推导式:替代多层for循环与中间变量初始化,代码更紧凑简洁,符合Python"写更少代码做更多事"的风格。
  • 映射字典+get方法:用bool_mapping集中管理布尔字符串的转换规则,避免冗余的if-elif判断;dict.get()方法一次完成"匹配转换/保留原值"的逻辑,减少重复调用value.lower()的开销。
  • 移除冗余操作:原代码中dict(row).items()是多余的,row本身就是DictReader返回的字典对象,直接调用row.items()即可。
  • 直接返回结果:省去初始化filedict和newrow的步骤,减少不必要的中间变量,提升代码可读性与效率。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:40:33