我必须以下列格式创建一个表:{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']}
我被困住了;我只是想不出一种方法来为它工作任意数量的键和值
答案 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}
生成一个字典,在上面的代码中,列中的每个第一个元素都成为键,其余的形成值。