如何在Python中从csv文件读取字典列表?

时间:2019-03-09 10:32:35

标签: python pandas dictionary

我使用以下代码将字典写入csv文件。

with open('dict.csv', 'w') as csv_file:
    writer = csv.writer(csv_file)
    for key, value in dict.items():
        writer.writerow([key, value])

在“ dict.csv”文件中:

符合[16、32、49]
根据[8,37,49,50]
相应地[8,37,50]
帐户[8,10,16,19,20,23,25,33,34,47]

其中,根据,因此和说明分别是键和[16、32、49],[8、37、49、50],[8、37、50],[8、10、16、19, 20、23、25、33、34、47]分别是theri值。
示例:
dict = {'accord':[16,32,49]}

现在,我想把它读回字典。怎么做?

with open('dict.csv','r') as csv_file:
    reader = csv.reader(csv_file)
    dict ={rows[0]:rows[1] for rows in reader}


我尝试使用此代码,但出现索引错误。

IndexError:列表索引超出范围。

然后使用下面的代码给我这个错误。
UnicodeDecodeError:“ utf-8”编解码器无法解码位置5:无效的起始字节中的字节0x97。

dict={}
csv_file=pd.read_csv('dict.csv')
for index, row in csv_file.iterrows():
    dict[row[0]]= row[[1]].tolist()

1 个答案:

答案 0 :(得分:0)

您基本上创建了自定义的csv格式。您可以使用字符串操作重新读取输入内容:

with open('dict.csv', 'w', newline="") as csv_file:
    csv_file.write("""accord [16, 32, 49] 
according [8, 37, 49, 50] 
accordingly [8, 37, 50] 
account [8, 10, 16, 19, 20, 23, 25, 33, 34, 47]""")

data = {}
with open('dict.csv', 'r') as csv_file:
    for line in csv_file:
        key, *values = line.replace("[","").replace("]","").replace(",","").split()
        try:
            data[key] = list(map(int,values))  # try to convert to int list
        except ValueError:
            data[key] = values                 # else use string list
print(data)

输出:

{'accord': [16, 32, 49], 
 'according': [8, 37, 49, 50], 
 'accordingly': [8, 37, 50], 
 'account': [8, 10, 16, 19, 20, 23, 25, 33, 34, 47]}