所以我有一个 CSV 文件,其中的数据排列如下:
X,a,1,b,2,c,3
Y,a,1,b,2,c,3,d,4
Z,l,2,m,3
我想导入 CSV 以创建一个嵌套字典,如下所示。
data = {'X' : {'a' : 1, 'b' : 2, 'c' : 3},
'y' : {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4},
'Z' : {'l' : 2, 'm' :3}}
在我编写的程序中更新字典后(我弄清楚了那部分),我希望能够将字典导出到同一个 CSV 文件中,覆盖/更新它。不过,我希望它的格式与之前的 CSV 文件相同,以便我可以再次导入它。
我一直在尝试导入并到目前为止
import csv
data = {}
with open('userdata.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
data[row[0]] = {row[i] for i in range(1, len(row))}
但这不起作用,因为事情安排不正确。有些数字是其他数字的子项,字母不合适,等等。我什至还没有到达导出部分。有任何想法吗?
最佳答案
由于您对保持秩序不感兴趣,因此相对简单的方法应该可行:
import csv
# import
data = {}
with open('userdata.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
a = iter(row[1:])
data[row[0]] = dict(zip(a, a))
# export
with open('userdata_exported.csv', 'w') as f:
writer = csv.writer(f)
for key, values in data.items():
row = [key] + [value for item in values.items() for value in item]
writer.writerow(row)
通过仅调用 csv.writer
的 writerows()
方法并向其传递 generator expression ,可以更有效地完成后者。 .
# export2
with open('userdata_exported.csv', 'w') as f:
writer = csv.writer(f)
rows = ([key] + [value for item in values.items() for value in item]
for key, values in data.items())
writer.writerows(rows)
关于python - 从 CSV 文件导入/导出嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901067/