从CSV文件创建字典的字典

gojuced7  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(152)

我试图从一个CSV文件创建一个Python字典的字典,文件看起来像这样:
| 第1栏|第2栏|第3栏|
| - ------|- ------|- ------|
| A类|花|十二|
| A类|太阳|十三|
| 乙|云|十四|
| 乙|水|三十四|
| C级|岩石|十二|
我正试着做一本字典的字典,看起来像这样:

dict = {
        'A': {'flower': 12, 'sun': 13},
        'B': {'cloud': 14, 'water': 34},
        'C': {'rock': 12}
                   }

到目前为止,我尝试的代码如下所示:

import csv 
with open('file.csv', 'r') as csvFile:  
    rows=csv.reader(csvFile) 
    d=dict()     
    for row in rows: 
        head,tail=row[0], row[1:] 
        d[head]=dict(zip(tail[0:], tail[1:])) 
    print(d)

但效果并不好,我得到了这个结果:

dict = {
        'A': {'sun': 13},
        'B': {'water': 34},
        'C': {'rock': 12}
                   }
yrwegjxp

yrwegjxp1#

您需要在每次迭代时更新d[head],而不是替换它:

import csv 
with open('file.csv', 'r') as csvFile:  
    rows=csv.reader(csvFile) 
    d=dict()     
    for row in rows:
        head,name,value=row[0], row[1], row[2]
        if head not in d:
            d[head]= {} # {} is like dict() but faster
        d[head][name] = value
    print(d)

或者用defaultdict来更简洁些:

import csv
from collections import defaultdict

with open('file.csv', 'r') as csvFile:  
    rows=csv.reader(csvFile) 
    d = defaultdict(dict)
    for row in rows:
        head,name,value=row[0], row[1], row[2]
        d[head][name] = value
    print(d) # or print(dict(d))

相关问题