Python帮助:从csv文件创建{str:list of str}的dict

时间:2013-11-29 19:57:08

标签: python import-from-csv

我必须以下列格式创建一个表:{str: list of str}

使用以下代码打开.csv文件,我得到:

import csv
cr = csv.reader(open("name.csv","r"))
for row in cr:
    print(row)

输出:

['key1', 'key2', 'key3']
['value1', 'value2', 'value3']
['value4', 'value5', 'value6']

我基本上需要将其结构化为格式

{'key1': ['value1', 'value4'], 'key2': ['value2', 'value5'], 'key3': ['value3', 'value6']}

我被困住了;我只是想不出一种方法来为它工作任意数量的键和值

1 个答案:

答案 0 :(得分:4)

使用zip()将行转换为列,然后将这些行转换为字典键和值:

import csv

with open("name.csv", newline='') as infh:
    cr = csv.reader(infh)
    columns = {r[0]: list(r[1:]) for r in zip(*cr)}

最后一行的快速演示:

>>> cr = [
...     ['key1', 'key2', 'key3'],
...     ['value1', 'value2', 'value3'],
...     ['value4', 'value5', 'value6'],
... ]
>>> {r[0]: list(r[1:]) for r in zip(*cr)}
{'key3': ['value3', 'value6'], 'key2': ['value2', 'value5'], 'key1': ['value1', 'value4']}

其中cr代表csv.reader()对象。

zip(*iterable)获取迭代中的所有元素并将其转换为矩阵;列成为行,因为每个嵌套值与来自同一位置的其他行的值配对:

>>> zip(*[[1, 2, 3], [4, 5, 6]])
[(1, 4), (2, 5), (3, 6)]

和dict comprehension {key_expression: value_expression for targets in iterable}生成一个字典,在上面的代码中,列中的每个第一个元素都成为键,其余的形成值。