【发布时间】:2014-06-21 20:59:54
【问题描述】:
我有一个 CSV 文件,其标题位于数据列的顶部:
a,b,c
1,2,3
4,5,6
7,8,9
我需要在列表的字典中阅读它:
desired_result = {'a': [1, 4, 7], 'b': [2, 5, 8], 'c': [3, 6, 9]}
使用DictReader 阅读本文时,我使用嵌套循环将项目附加到列表中:
f = 'path_to_some_csv_file.csv'
dr = csv.DictReader(open(f))
dict_of_lists = dr.next()
for k in dict_of_lists.keys():
dict_of_lists[k] = [dict_of_lists[k]]
for line in dr:
for k in dict_of_lists.keys():
dict_of_lists[k].append(line[k])
第一个循环将 dict 中的所有值设置为空列表。下一个循环遍历从 CSV 文件中读取的每一行,DictReader 从中创建一个键值字典。内部循环将值附加到与相应键匹配的列表中,因此我最终得到了所需的字典列表。我最终不得不经常写这个。
我的问题是,有没有更 Pythonic 的方式来使用没有嵌套循环的内置函数,或者更好的习惯用法,或者存储此数据结构的替代方式,以便我可以通过查询返回可索引列表用钥匙?如果是这样,是否还有一种方法可以格式化由列预先摄取的数据?
【问题讨论】:
-
for k in dict_of_lists.keys():->for k in dict_of_lists:
标签: python list csv dictionary