首页 > 解决方案 > 将 3 列 csv 读入嵌套字典

问题描述

我一直在关注几个阅读 csv 文件的例子。我有一个 /some/path/file.csv 作为

type,id,password
db,db_admin,admin123
db,db_user,user123
mw,mw_admin,admin456
mw,mw_user,user456
fe,fe_admin,admin789
fe,fe_user,user789

代码:

import csv
from collections import defaultdict

types = defaultdict(list)
with open(r'/some/path/file.csv', 'r') as csvfile:
  reader = csv.DictReader(csvfile)
  for row in reader:
  types[row['type']].append({row['id'], row['password']})
print(types)

输出:

{'db': [{'db_admin': 'admin123', 'db_user': 'user123'}],
'mw': [{'mw_admin': 'admin456', 'mw_user': 'user456'}],
'fe': [{'fe_admin': 'admin789', 'fe_user': 'user789'}]}

我希望以这种方式将其传递给一个方法。以及如何在循环中迭代这些并将 'db' 和 {'db_admin': 'admin123', 'db_user': 'user123'} 传递给方法。

{'db': {'db_admin': 'admin123', 'db_user': 'user123'},
'mw': {'mw_admin': 'admin456', 'mw_user': 'user456'},
'fe': {'fe_admin': 'admin789', 'fe_user': 'user789'}}

标签: python-3.xcsv

解决方案


您可以为csv 文件中setdefault具有相同内容的所有行使用和创建共享条目:type

import csv

types = {}
with open('file.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        types.setdefault(row['type'], {})[row['id']] = row['password']
print(types)

输出

{'db': {'db_admin': 'admin123', 'db_user': 'user123'}, 'mw': {'mw_admin': 'admin456', 'mw_user': 'user456'}, 'fe': {'fe_admin': 'admin789', 'fe_user': 'user789'}}

推荐阅读