Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将嵌套字典写入CSV文件_Python_Python 3.x_Csv_Dictionary_Opencsv - Fatal编程技术网

Python 如何将嵌套字典写入CSV文件

Python 如何将嵌套字典写入CSV文件,python,python-3.x,csv,dictionary,opencsv,Python,Python 3.x,Csv,Dictionary,Opencsv,我有一本字典 count = {'lt60': {'a': 0, 'b': 0, 'c': 0, 'd': 0}, 'ge60le90': {'a': 4, 'b': 0, 'C': 0, 'd': 0}, 'gt90': {'a': 0, 'b': 1, 'c': 2, 'd': 1} } 我想用CSV格式写这本词典,如图所示 我想要的是图片的关键从lt60,ge60le90,gt90,并希望他们写在一行。就像我从所有嵌套字典中选择“a”及其值,并将其值写入该行。您可以使用pandas执行此

我有一本字典

count = {'lt60': {'a': 0, 'b': 0, 'c': 0, 'd': 0}, 'ge60le90': {'a': 4, 'b': 0, 'C': 0, 'd': 0}, 'gt90': {'a': 0, 'b': 1, 'c': 2, 'd': 1} }
我想用CSV格式写这本词典,如图所示


我想要的是图片的关键从lt60,ge60le90,gt90,并希望他们写在一行。就像我从所有嵌套字典中选择“a”及其值,并将其值写入该行。

您可以使用
pandas
执行此操作:

import pandas as pd

count = {'lt60': {'a': 0, 'b': 0, 'c': 0, 'd': 0},
         'ge60le90': {'a': 4, 'b': 0, 'c': 0, 'd': 0},
         'gt90': {'a': 0, 'b': 1, 'c': 2, 'd': 1} }

df = pd.DataFrame(count).rename_axis('relation_type').reset_index()

df = df.rename(columns={'ge60le90': 'confidence<90',
                        'gt90': 'confidence>90',
                        'lt60': 'confidence<60'})

df.to_csv('out.csv', index=False)

#   relation_type  confidence<90  confidence>90  confidence<60
# 0             a              4              0              0
# 1             b              0              1              0
# 2             c              0              2              0
# 3             d              0              1              0
将熊猫作为pd导入
计数={'lt60':{'a':0,'b':0,'c':0,'d':0},
'ge60le90':{'a':4,'b':0,'c':0,'d':0},
'gt90':{'a':0,'b':1,'c':2,'d':1}
df=pd.DataFrame(count)。重命名轴(“关系类型”)。重置索引()
df=df.rename(列={'ge60le90':'confidence90',

'lt60':'confidence这个问题可以通过迭代dict来简化,以提取您的键和这些键的值

count = {'lt60': {'a': 0, 'b': 0, 'c': 0, 'd': 0},
         'ge60le90': {'a': 4, 'b': 0, 'c': 0, 'd': 0},
         'gt90': {'a': 0, 'b': 1, 'c': 2, 'd': 1} }

# Create outfile
f = open("C:\\Users\\<USER>\\Desktop\\OUT.csv","w")
# Write first row
f.write(",a,b,c,d\n")

# Iterate through keys
for keys in count:
    print(keys)
    f.write(keys + ",")

    KEYS = count[keys]
# Iterate though values
    for values in KEYS:
        print(KEYS[values])
        f.write(str(KEYS[values]) + ",")
    f.write("\n")
f.close()
count={'lt60':{'a':0,'b':0,'c':0,'d':0},
'ge60le90':{'a':4,'b':0,'c':0,'d':0},
'gt90':{'a':0,'b':1,'c':2,'d':1}
#创建输出文件
f=打开(“C:\\Users\\\\Desktop\\OUT.csv”,“w”)
#写第一行
f、 写(“,a,b,c,d\n”)
#遍历键
对于计数中的键:
打印(钥匙)
f、 写入(键+“,”)
钥匙=计数[钥匙]
#遍历值
对于键中的值:
打印(键[值])
f、 写入(str(键[值])+“,”)
f、 写入(“\n”)
f、 关闭()

另一种方法是利用
csv
模块(请注意,在您的字典中有一个大写的
C
,我在下面的代码中对其进行了更正):

导入csv

lookup={'ge60le90':'confidence90','lt60':'confidence可能是@MikeScotty的副本,我尝试过,但它不起作用,这就是为什么我要问的原因,因为我是python的初学者。如果你尝试了某个东西,但“它不起作用”,那么在你的尝试(或者至少是一个MCVE)后,贴上它“不起作用”的确切描述。另外,请将您的excel屏幕截图替换为实际预期的csv(csv是您知道的文本格式?)@Brunodesshuilliers我是这个平台的新手,也是python的新手。所以我不知道我是否也需要发布我的代码…实际上我正在使用csv模块进行尝试,我不知道如何从嵌套字典中提取键和值:)希望你能理解:)“列表([[count[k][I]代表count中的k.keys()]代表行中的I])”=>列表()无效,参数已经是一个列表
import csv

lookup = {'ge60le90': 'confidence<90','gt90': 'confidence>90', 'lt60': 'confidence<60'}

count = {'lt60': {'a': 0, 'b': 0, 'c': 0, 'd': 0}, 'ge60le90': {'a': 4, 'b': 0, 'c': 0, 'd': 0}, 'gt90': {'a': 0, 'b': 1, 'c': 2, 'd': 1} }

# Getting keys from dictionary that match them with titles below.
rowKeys = [k for k in count['lt60'].keys()] 
titles = [['relation type'] + list(lookup[k] for k in count.keys())]

# Getting all row variable values for every title.
rows = [[count[k][i] for k in count.keys()] for i in rowKeys]

# Concatenating variables and values.
fields = [[rowKeys[i]] + rows[i] for i in range(len(rowKeys))]

# Concatenating final output to be written to file.
result = titles + fields
print("Final result to be written: ")
for r in result:
    print(r)

# Writing to file.
with open("output.csv", "w", newline="") as outFile:
    writer = csv.writer(outFile, delimiter=';',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    writer.writerows(result)