python - 从 CSV 文件导入/导出嵌套字典

标签 python csv dictionary nested

所以我有一个 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.writerwriterows() 方法并向其传递 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/

相关文章:

python - 消除趋势或过滤锯齿信号 (Python)

csv - 将 csv 文件添加到 HTTP POST

python 将 csv 文件读取为字典并排序和递增计数器

python - 将字典列表解压到 pandas 数据框中的列表中

python - Python中的条件运算符?

python - 如何删除少于 3 个字符的单词?

python - Pandas 写入 excel : 1) blank row from index; 2) keep index daily

mysql - 如何在 MySQL 中将变量中存储的值写入 CSV

google-maps - 如何使用 GMaps.js 的 fitBounds

list - 在 Dart 中, `List.unmodifiable` 是创建一个不可修改的 View ,还是一个全新的独立列表?