首页 > 解决方案 > 使用 for 循环创建嵌套字典

问题描述

我有一个 csv 文件,我试图创建一个嵌套字典,如下所示:

contacts = {"Tom": {"name": "Tom Techie",
                    "phone": "123 123546",
                    "email": "tom@tom.fi",
                    "skype": "skypenick"},

            "Mike": {"name": "Mike Mechanic",
                     "phone": "000 123546",
                     "email": "mike@mike.fi",
                     "skype": "-Mike-M-"}}

ETC

这就是我写的:

file = open("csv","r")
d = {}
for i in file:

    f = i.strip()
    x = f.split(";")

    if x[4] != "":
        d.update({x[0] : {"name":x[1],
                      "phone":x[2],
                      "email":x[3],
                      "skype":x[4]}})

    else:
        d.update ({x[0] : {"name": x[1],
                       "phone": x[2],
                       "email": x[3]}})

然而,当它们应该像上面所说的那样时,它将 dict 打印为普通字典,并将更新作为键。

编辑: csv 的第一行:

key;name;phone;email;skype
Tom;Tom Techie;123 123546;tom@tom.fi;skypenick
Mike;Mike Mechanic;000 123456;mike@mike.fi;-Mike-M-
Archie;Archie Architect;050 987654;archie@archie

标签: pythonpython-3.xcsvdictionary

解决方案


您可以使用pd.read_csv()to_dict()

import pandas as pd

contacts = pd.read_csv('test.csv', sep=';').set_index('key').to_dict(orient='index')

产量:

{'Tom': {'name': 'Tom Techie', 'phone': '123 123546', 'email': 'tom@tom.fi', 'skype': 'skypenick'}, 'Mike': {'name': 'Mike Mechanic', 'phone': '000 123456', 'email': 'mike@mike.fi', 'skype': '-Mike-M-'}, 'Archie': {'name': 'Archie Architect', 'phone': '050 987654', 'email': 'archie@archie', 'skype': nan}}

推荐阅读