python - 使用 for 循环创建嵌套字典

标签 python python-3.x csv dictionary

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

contacts = {"Tom": {"name": "Tom Techie",
                    "phone": "123 123546",
                    "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="41352e2c01352e2c6f2728" rel="noreferrer noopener nofollow">[email protected]</a>",
                    "skype": "skypenick"},

            "Mike": {"name": "Mike Mechanic",
                     "phone": "000 123546",
                     "email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5f3236343a1f3236343a713936" rel="noreferrer noopener nofollow">[email protected]</a>",
                     "skype": "-Mike-M-"}}

等等

这就是我写的:

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]}})

但是,当它们应该像上面所述时,它会将字典打印为普通字典,并将更新作为键。

编辑: csv 的第一行:

key;name;phone;email;skype
Tom;Tom Techie;123 123546;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="daaeb5b79aaeb5b7f4bcb3" rel="noreferrer noopener nofollow">[email protected]</a>;skypenick
Mike;Mike Mechanic;000 123456;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ce1e5e7e9cce1e5e7e9a2eae5" rel="noreferrer noopener nofollow">[email protected]</a>;-Mike-M-
Archie;Archie Architect;050 987654;archie@archie

最佳答案

您可以使用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': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e0a11133e0a1113501817" rel="noreferrer noopener nofollow">[email protected]</a>', 'skype': 'skypenick'}, 'Mike': {'name': 'Mike Mechanic', 'phone': '000 123456', 'email': '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9b4b0b2bc99b4b0b2bcf7bfb0" rel="noreferrer noopener nofollow">[email protected]</a>', 'skype': '-Mike-M-'}, 'Archie': {'name': 'Archie Architect', 'phone': '050 987654', 'email': 'archie@archie', 'skype': nan}}

关于python - 使用 for 循环创建嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976002/

相关文章:

python - azure 虚拟机操作

python-3.x - 没有打印功能的python 3中的字符串格式

python - 使用 Python 和 pypyodbc 插入 MSSQL 数据 - 参数必须位于列表、元组中

mysql - BCP SQL 导出到 CSV

javascript - Ember.js,使用 {{each}} 循环遍历两个数组

python - 使用基于 Python 的开源框架和 NoSQL 后端构建 REST API

Python 脚本从列表中删除唯一元素并按正确顺序打印重复元素的列表

python - Gensim:如何从文本文件加载预计算的词向量

python - 无法通过在 Python 中搜索 csv 文件获得结果

python - 来自 django 模型的数据未传递到 highcharts 图表