这里的总 Python 菜鸟,可能缺少一些明显的东西。我到处搜索,还没有找到解决方案,所以我想我会寻求帮助。
我正在尝试编写一个函数,该函数将从一个大型 csv 文件构建一个嵌套字典。输入文件格式如下:
Product,Price,Cost,Brand,
blue widget,5,4,sony,
red widget,6,5,sony,
green widget,7,5,microsoft,
purple widget,7,6,microsoft,
ETC...
我需要的输出字典如下所示:
projects = { `<Brand>`: { `<Product>`: { 'Price': `<Price>`, 'Cost': `<Cost>` },},}
但显然有很多不同的品牌包含不同的产品。在输入文件中,数据按品牌名称的字母顺序排列,但我知道一旦执行 DictReader,它就会变得无序,所以我肯定需要一种更好的方法来处理重复项。所写的 if 语句是多余且不必要的。
这是我到目前为止的非工作,无用的代码:
def build_dict(source_file):
projects = {}
headers = ['Product', 'Price', 'Cost', 'Brand']
reader = csv.DictReader(open(source_file), fieldnames = headers, dialect = 'excel')
current_brand = 'None'
for row in reader:
if Brand != current_brand:
current_brand = Brand
projects[Brand] = {Product: {'Price': Price, 'Cost': Cost}}
return projects
source_file = 'merged.csv'
print build_dict(source_file)
我当然已经在文件顶部导入了 csv 模块。
最好的方法是什么?我觉得我偏离了方向,但是关于从 CSV 创建嵌套 dicts 的信息很少,而且那里的示例非常具体,往往不会详细说明解决方案实际有效的原因,所以作为 Python 新手,很难得出结论。
此外,输入的 csv 文件通常没有标题,但为了尝试获得此函数的工作版本,我手动插入了标题行。理想情况下,会有一些代码分配标题。
非常感谢任何帮助/方向/建议,谢谢!