2015-09-27 194 views
1

我想从CSV文件读取列表字典。 我试图访问数据结构,如:Python - 从CSV读取列表字典

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文件中正确检索列表的完整字典?

回答

4

你写的repr()输出嵌套列表的位置:

for key, val in dbfree.items(): 
    w.writerow([key, val]) 

这里val[u'x', 'y', 'z'];将其存储在一列中csv文件只是简单地写出repr(val)的结果。

您可以在串再次与ast.literal_eval() function解码为Python对象:

import ast 

dbproj = {} 
for key, val in unicodecsv.reader(open(filename)): 
    dbproj[key] = ast.literal_eval(val) 

ast.literal_eval()解释输入为Python表达,但限于文字,Python语法的对象定义如字典,列表,元组,集合和字符串,数字,布尔值和None

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)