繁体   English   中英

是否可以将字典词典写入 CSV 文件?

[英]Is it possible to write a Dictionary of Dictionaries to a CSV file?

我指的字典格式是这样的(仅供参考,这些只是足球运动员):

player_list = {
    'Shkodran Mustafi': {'first': 'Shkodran', 'last': 'Mustafi', 'team': 'Arsenal'},
    'Héctor Bellerín': {'first': 'Héctor', 'last': 'Bellerín', 'team': 'Arsenal'},
    'Sead Kolasinac': {'first': 'Sead', 'last': 'Kolasinac', 'team': 'Arsenal'}
    }

是否可以使用这本字典将类似下表的内容写入 CSV?

First Name:    Last Name:     Team: 

Shkodran       Mustafi        Arsenal
Héctor         Bellerín       Arsenal
Sead           Kolasinac      Arsenal

任何有关如何实现这一目标的帮助将不胜感激! 谢谢你!

如果您真的希望将内部字典中的列写入 CSV 文件,则可以使用 Pandas 轻松完成。

player_list = {
    'Shkodran Mustafi': {'first': 'Shkodran', 'last': 'Mustafi', 'team': 'Arsenal'},
    'Héctor Bellerín': {'first': 'Héctor', 'last': 'Bellerín', 'team': 'Arsenal'},
    'Sead Kolasinac': {'first': 'Sead', 'last': 'Kolasinac', 'team': 'Arsenal'},}
import pandas as pd
df = pd.DataFrame(player_list).T
df.columns = ['First Name', 'Last Name', 'Team']
df.to_csv('test.csv', index=False)

将产生与您在问题中发布的表格等效的 CSV :

First Name,Last Name,Team
Shkodran,Mustafi,Arsenal
Héctor,Bellerín,Arsenal
Sead,Kolasinac,Arsenal

所以基本上迭代字典并将其放入.csv 格式?

player_list = {
    'Shkodran Mustafi': {'first': 'Shkodran', 'last': 'Mustafi', 'team': 'Arsenal'},
    'Héctor Bellerín': {'first': 'Héctor', 'last': 'Bellerín', 'team': 'Arsenal'},
    'Sead Kolasinac': {'first': 'Sead', 'last': 'Kolasinac', 'team': 'Arsenal'}}

keys = ['first', 'last', 'team']

with open("data.csv", 'w') as wf:
    wf.write("First Name:,Last Name:,Team:\n")
    for k, v in player_list.items():
        to_write = []
        for key in keys:
             to_write.append(str(v[key]))
        wf.write(','.join(to_write) + '\n')

在这种情况下,您甚至不必担心它是字典的事实。 无论如何,您只会输出“内部”字典,因此您可以执行以下操作:

player_list = {
'Shkodran Mustafi': {'first': 'Shkodran', 'last': 'Mustafi', 'team': 'Arsenal'},
'Héctor Bellerín': {'first': 'Héctor', 'last': 'Bellerín', 'team': 'Arsenal'},
'Sead Kolasinac': {'first': 'Sead', 'last': 'Kolasinac', 'team': 'Arsenal' }
}

with open('output.csv', 'w') as writer:
    writer.write("First Name:,Last Name:,Team:\n")
    for key, value in player_list.items():
        writer.write(value['first'] + ',' + value['last'] + ',' + value['team'] + '\n')

在这种情况下,只有 3 个值,所以我只使用了字符串连接,但如果您正在做更多的值,您可能想尝试类似 @tgikal 正在做的事情。

CSV 是一种可以表示任何 hash 散列的格式,或者如果我猜对了,您正在使用 Python 字典字典。

您需要编写正确的解析器

一种方法是使用不同的分隔符来表示嵌套哈希,例如括号 {

{,Shkodran Mustafi,{,first,Shkodran,last,Mustafi,team,Arsenal,},}

我建议您使用 json、yaml 或 hocon,它们在人眼上更容易

An object you may find useful is csv.DictWriter : https://docs.python.org/2/library/csv.html#csv.DictWriter

示例用法:

import csv

player_list = {
    'Shkodran Mustafi': {'first': 'Shkodran', 'last': 'Mustafi','team': 'Arsenal'},
    'Héctor Bellerín': {'first': 'Héctor', 'last': 'Bellerín','team': 'Arsenal'},
    'Sead Kolasinac': {'first': 'Sead', 'last': 'Kolasinac', 'team': 'Arsenal'}
}

with open("player_data.csv", 'w') as fp:
    writer = csv.DictWriter(fp, fieldnames=['first', 'last', 'team'])
    writer.writeheader()
    for player_name, player_info in player_list.items():
        writer.writerow(player_info)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM