我有一个包含列表作为值的字典(请参见下文),并希望将其保存到csv。到目前为止,保存工作还可以,但是当我将其读回程序时,会得到以下结果,其中两个列表[1,2,3]和[4,5,6]不再是列表,而是字符串( “ [1,2,3]”和“ [4,5,6]”)。
如何从csv中以列表而不是字符串的形式加载列表?这样我就可以再次访问列表中的元素,而不是单个字符(请参见下文)。
nodes = []
test_list = [{'Key' : 'key1', 'List' : [1,2,3]},
{'Key' : 'key2', 'List' : [4,5,6]}]
with open('list.csv', 'wb') as f:
writer = csv.DictWriter(f, test_list[0].keys(), delimiter=';')
writer.writeheader()
for entry in test_list:
writer.writerow(entry)
with open('list.csv') as f:
dataset = csv.DictReader(f, delimiter=';')
for row in dataset:
nodes.append(row)
for elem in nodes:
print elem
结果:
{'Key': 'key1', 'List': '[1, 2, 3]'}
{'Key': 'key2', 'List': '[4, 5, 6]'}
问题:
所以现在列表是字符串,我无法访问列表中的数字,因为它现在是字符列表。
>> print nodes[0]['List'][0] # print first number from list in first dictionary
[
有谁能够帮助我或为我提供替代方案?
在此先多谢!
python大神给出的解决方案
CSV并不是真的以这种方式存储嵌套列表。您可以使用eval
,但是这样做非常麻烦,因为它允许人们在您的计算机上运行代码,例如,如果您让人们将文件上传到服务器上。相反,我建议您将字典存储为JSON对象。这将解决很多可能在以后出现的特殊情况。
import json
test_list = [{'Key' : 'key1', 'List' : [1,2,3]},
{'Key' : 'key2', 'List' : [4,5,6]}]
with open('/tmp/test_list.json', 'w') as f:
json.dump(test_list, f)
然后加载它:
with open('/tmp/test_list.json') as f:
test_list = json.load(f)