从csv创建嵌套字典

问题描述

我在csv中有一些数据,打开时看起来像这样:

Example Data
['','Name','Phone','Address','City','Country','Email']
['1','Bob Myers','410-504-5887','12334 Hamilton Way','Toronto','Canada','bob@gmail.com']
['2','Carlton James','455-323-8479','1234 James Rd','New York','USA','carlton@example.com']
['3','Frank Wright','744-521-9874','567 Travis St','Boston','fw4322@yahoo.com']

我想创建一个嵌套字典,在其中将''中的整数用作每个嵌套字典的键。我发现了一些类似的问题并尝试过:

import csv
f = csv.DictReader(open('data.csv'))

result = {}
for row in f:
    key = row.pop('')
    result[key] = row
print(result)

哪个产生类似:

{'1': {'Name': 'Bob Myers','Phone': '410-504-5887','Address': '12334 Hamilton Way','City': 'Toronto','Country': 'Canada','Email': 'bob@gmail.com'}...

如何更改代码以使数据看起来像这样(没有熊猫)?

my_dict = {{'Name': {1: 'Bob Myers',2: 'Carlton James',3: 'Frank Wright'}},{'Phone': {1: '410-504-5887',2: '455-323-8479',3: '744-521-9874'}},{'Address': {1: '12334 Hamilton Way',2: '1234 James Rd',3: '567 Travis St'}},{'City': {1: 'Toronto',2: 'New York',3: 'Boston'}},{'Country': {1: 'Canada',2: 'USA',3: 'USA'}},{'Email': {1: 'bob@gmail.com',2: 'carlton@example.com',3: 'fw4322@yahoo.com'}}
}

解决方法

最好的方法是(ab)使用熊猫;-)

import pandas as pd
d = pd.DataFrame([result]).to_dict()
print(d)

对于测试用例result

{'1': {'Name': 'Bob Myers','Phone': '410-504-5887','Address': '12334 Hamilton Way','City': 'Toronto','Country': 'Canada','Email': 'bob@gmail.com'}

输出就像:

{'Name': {0: 'Bob Myers'},'Phone': {0: '410-504-5887'},'Address': {0: '12334 Hamilton Way'},'City': {0: 'Toronto'},'Country': {0: 'Canada'},'Email': {0: 'bob@gmail.com'}} 
,

由于您具有csv数据文件,因此最好使用pandas

import pandas as pd

a = pd.read_csv(file location)

nested_dict = a.todict()