我试图从CSV文件中读取List的字典。 我试图访问数据结构,如:
dbfree = {u'keyname': [u'x', 'y', 'z']}
这些数据结构使用以下代码存储在CSV文件中:
for key, val in dbfree.items():
w.writerow([key, val])
我以这种方式阅读了CSV:
dbproj = {}
for key, val in unicodecsv.reader(open(filename)):
dbproj[key] = val
但输出是这样的:
{u'key name': u"[u'x', 'y', 'z']"
如何从CSV文件中正确检索完整的列表词典?
答案 0 :(得分:4)
您在此处编写了嵌套列表的 repr()
输出:
for key, val in dbfree.items():
w.writerow([key, val])
此处val
为[u'x', 'y', 'z']
;要将csv
文件存储在一列中,只需将结果写为repr(val)
。
您可以使用ast.literal_eval()
function:
import ast
dbproj = {}
for key, val in unicodecsv.reader(open(filename)):
dbproj[key] = ast.literal_eval(val)
ast.literal_eval()
将输入解释为Python表达式,但仅限于 literals ,Python语法定义对象,如字典,列表,元组,集合和字符串,数字,布尔值和{ {1}}。
答案 1 :(得分:1)
您需要对值进行反序列化,您可以使用json
模块:
import json
for key, val in dbfree.items():
w.writerow([key, json.dumps(val)])
阅读:
dbproj = {}
for key, val in unicodecsv.reader(open(filename)):
dbproj[key] = json.loads(val)