从csv导入包含列表的字典 - python

我有一个包含列表作为值的字典(请参见下文),并希望将其保存到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)