Python 来自csv的嵌套字典

Python 来自csv的嵌套字典,python,python-3.x,csv,dictionary,nested-loops,Python,Python 3.x,Csv,Dictionary,Nested Loops,我被这个问题困住了。我在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

我被这个问题困住了。我在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', 'USA', 'fw4322@yahoo.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'}}
}
我编写了一个脚本来执行此操作,但我的脚本只返回行中的最后一项,如下所示:

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

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

-------:

{'1': 'bob@gmail.com', '2': 'carlton@example.com', '3': 'fw4322@yahoo.com'}
如何调整脚本以遍历所有行中的所有索引


我不能使用pandas。

您正在迭代所有索引,问题是您只有一个带有键“1”、“2”和“3”的dict,并且您正在更改与此键相关的值。也许你应该为每一列创建一个dict。您可以使用
reader.fieldnames
获取列名,您可以

for field in reader.fieldnames:
    result[field] = {}
创建第一个字典。然后迭代每一行并将每个值添加到右dict from result

csv。DictReader()
返回一个
OrderedDict
,因此解决此问题的关键是使用标准字典方法访问值。这种方法提供了预期的结果:

导入csv
f=csv.DictReader(打开('data.csv'))
结果={}
对于i,枚举中的行(f,start=1):
行。pop(“”)
如果i==1:
对于键,第行中的值。项()
结果[键]={}
结果[键][i]=值
其他:
对于键,第行中的值。项()
结果[键][i]=值
打印(结果)
输出:


来自DictReader的行与您的示例不同。如果打印这些行,它们将是
dict
,而不是list。我不确定您的示例数据来自何处,它不是CSV,但它是由
CSV.reader
读取时CSV的样子。最好将实际的CSV行作为示例数据发布,以便我们可以使用您的代码运行它。是的。这就是阅读时的样子。我编辑了评论以反映这一点。这就是文件的外观?那就不是CSV了。它看起来像一行行json或python列表,打印为字符串。如果您以DictReader的身份阅读此文件,它们将是
{“[”:“['1'”、“'Name'”、“'Bob Myers'”、“'Phone'”、“'410-504-5887'”、“'Address'”、“'12334 Hamilton Way'”、“'City'”、“'Toronto'、“'Country'”、“'Canada'、'Email'”:“'bob@gmail.com“]”}
{'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: ' sdfa@yahoo.com'}}