首页 > 解决方案 > 将具有一个键和两个值的字典写入 csv 文件

问题描述

我有一本字典,它有一个键和两个值。我想将字典写入 csv 文件,并根据其中一个值进行排序。我还希望每个值在 csv 文件中都有自己的列。我好像做不到。

sorted_combined = sorted(combined.items(), key = lambda kv: kv[1][1])
with open('output.csv', 'wb') as output:
   writer = csv.writer(output)
   writer.writerow(["Subject", "Sij", "gij"])
for key, value in sorted_combined.iteritems():
   writer.writerow(k, sorted_combined[k])

我知道有些人说尝试 writer.writerow([k] + sorted_combined) 或 writer.writerow(key, *value)

没有一个工作。我得到的错误消息是:无法连接元组。

我期望得到的是以下内容:

 Subject     Sij      gij
 sub001_01   6578     18
 sub992_03   3820     5

*****EDIT******* 这就是我的 sorted_combined 的样子.. 但是,例如,您在最后看到的 (1,6) 它不再是元组,而是字符串。在命名字典键时,每个元组都被转换为字符串。

[('network6_QNS_0045_01_(1, 6)', (0.0, 0.0)), ('network6_QNS_0045_01_(1, 4)', (0.0, 0.0)), ('network6_QNS_0045_01_(0, 6)', (0.0, 0.0) ), ('network6_QNS_0045_01_(2, 5)', (0.0, 0.0)), ('network6_QNS_0045_01_(1, 7)', (0.0, 0.0)), ('network6_QNS_0045_01_(1, 5)', (0.0, 0.0 )), ('network6_QNS_0045_01_(1, 3)', (0.0, 0.0)), ('network6_QNS_0045_01_(5, 6)', (0.0, 0.0)), ('network6_QNS_0045_01_(3, 5)', (0.0, 0.0)),('network6_qns_0045_01_(2,6)',(743466.0,18.387329999999999999)),('network6_qns_0045_01_(5,7)'' , 20.160640000000001)), ('network6_QNS_0045_01_(3, 6)', (780163.0, 24.748139999999999)), ('network6_QNS_0045_01_(2, 3)', (199652.0, 26.6358), ('000)network6_QNS_0045_01_(4, 7)', (2248433.0, 27.278729999999999)), ('network6_QNS_0045_01_(3, 4)', (922289.0, 27.979320000000001)), ('network6_QNS_0045_01_(1, 2)', (396823.0, 29.924759999999999)), ( 'Network6_QNS_0045_01_(4,6)',(2897317.0,30.26620000001001)),('network6_qns_0045_01_(0,4)',(5209923.0 ('network6_qns_0045_01_(2,4)',(3622715.0,35.32117000000000002)),('network6_qns_0045_01_(2,7)',(364815.0 ,('network6_qns_0045_01_(0,7)',(224456.0,46.5182)),('network6_qns_0045_01_(0,3)',(1692.0,1692.0,56.88495000000000000000000000000000003) ), ('network6_QNS_0045_01_(3, 7)', (2012.0, 71.302719999999994)), ('network6_QNS_0045_01_(0, 2)', (1660.0, 84.085009999999997))]

标签: pythonpandascsvsortingdictionary

解决方案


您可以生成一个列表,将其展平并使用CSV简单地编写它。不过,我不知道是否有更短的方法。

import csv

my_dict = {"sub001_01": [6578,18], "sub992_03": [3820,5]}

with open('my_file.csv', 'w') as f:
    w=csv.writer(f)
    w.writerow(["Subject", "Sij", "gij"])
    for i in list(my_dict.items()):
        #We first make a list like: ['test', 1, 2, 3]
        list1=[a for a in i]
        list_final=[]
        list_final.append(i[0])
        for c in list1[1]:
            list_final.append(c)
        #We use writerow() to write our new list
        w.writerow(list_final)

输出:

Subject,Sij,gij
sub001_01,6578,18
sub992_03,3820,5

要使用 '\t' 而不是逗号,只需指定分隔符

w=csv.writer(f,delimiter="\t")

这将产生:

Subject Sij gij
sub001_01   6578    18
sub992_03   3820    5

PS:这是针对 Python 3.X

编辑:忘了提到这是一个可以处理超过 2 个值的通用循环。您也可以将它与其他字典(包含多个值的列表)一起使用。


推荐阅读