![](/img/trans.png)
[英]Write a list of common dictionaries to CSV with common key values in the same column
[英]How to write two python dictionaries with common key to CSV file?
我有以下两个词典:dict1 = {'a':100,'b':200,'c':300} dict2 = {'a':0.20,'b':0.25,'c':0.30}
我想将其写入CSV:
关键值1值2
一个100 0.20
b 200 0.25
约300 0.30
dict1 = {'a':100,'b':200,'c':300}
dict2 = {'a':0.20,'b':0.25,'c':0.30}
with open('some_file','w') as f:
f.write('Key\tValue1\tValue2\n')
for k in sorted(dict1.keys()):
f.write("{0}\t{1}\t{2}\n".format(k,dict1[k],dict2[k]))
这将遍历一个键集,并从两个字典中打印出值。 (奖金:适用于Python 2和Python3。)
对于希望在以下问题中找到答案的人:可能存在多个词典,并且可能存在不相交的键集,这是一个(有点怪异)的答案:
dict1 = {'a':100,'b':200,'c':300}
dict2 = {'a':0.20,'b':0.25,'c':0.30,'d':0.40}
dict3 = {'a':2000,'b':2500,'d':9000,'e':9500}
with open('some_file','w') as f:
f.write('Key\tValue1\tValue2\tValue3\n')
keys_union = set(dict1.keys()).union(set(dict2.keys())).union(set(dict3.keys()))
for k in sorted(keys_union):
f.write("{0}\t{1}\t{2}\t{3}\n".format( k,
[dict1[k] if k in dict1.keys() else "-"][0],
[dict2[k] if k in dict2.keys() else "-"][0],
[dict3[k] if k in dict3.keys() else "-"][0]))
这将为其中一个词典中缺少的值打印一个“-”。
您可以将字典写入pandas数据框 ,即```
from tabulate import tabulate
import pandas as pd
dict1 = {'a':100,'b':200,'c':300}
dict2 = {'a':0.20,'b':0.25,'c':0.30}
df = pd.Series(dict1,name='Value 1').to_frame()
df['Value 2'] = dict2.values()
print(tabulate(df, headers= 'keys', tablefmt= 'grid'))
打印df生成
+----+-----------+-----------+
| | Value 1 | Value 2 |
+====+===========+===========+
| a | 100 | 0.2 |
+----+-----------+-----------+
| b | 200 | 0.25 |
+----+-----------+-----------+
| c | 300 | 0.3 |
+----+-----------+-----------+
熊猫系列是一维数据结构,它将字典dict1
转换为一个序列,其中字典键作为索引,字典值作为序列值。 to_frame
将系列转换为具有一列的数据to_frame
(2D数据结构或表),行df['Value 2'] = dict2.values()
将dict2
添加为数据dict2
df
的第二列。
您可以使用以下方式将结果数据帧写入csv文件
df.to_csv('filename here')
这是使用cat
转储文件内容的结果
PS。 列表只需将数据框转换为修饰的文本以进行打印
编辑:这是矫kill过正,但是; 为了获得准确的输出,可以将索引重设/重命名,然后将to_csv
参数index
设置为False
; 表示不存储索引
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.