为了账号安全,请及时绑定邮箱和手机立即绑定

将带有一个键和两个值的字典写入 csv 文件

将带有一个键和两个值的字典写入 csv 文件

慕运维8079593 2021-11-02 13:55:24
我有一本字典,有一个键和两个值。我想将字典写入 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, 0.0)', (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, 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, 05) 0.0)),( 'network6_QNS_0045_01_(2,6)',(743466.0,18.387329999999999)),( 'network6_QNS_0045_01_(5,7)',(142774.0,18.769649999999999)),( 'network6_QNS_0045_01_(0,5)',(232822.0 , 20.160640000000001)), ('network6_QNS_0045_01_(3, 6)', (780163.0, 24.748139999999999), ('network6_QNS_0045_0999), ('network6_QNS_0045_039_0045_039_0),039_0045_039(039),036(039),036(039),0045_039_0396(039)0network6_QNS_0045_01_(4,7)”,(2248433.0,
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

我编辑了我的答案,您没有使用字典。你有一个元组列表。


import csv 

with open('output.csv', 'wb') as f:

    writer = csv.writer(f)

    writer.writerow(['Subject', 'Sij', 'gij'])

    for row in sorted_combined:

        l = [row[0]]

        l.append(row[0][1])

        l.append(row[1][1])

        writer.writerow(l)

就像你在最初的尝试中一样, csv.writer 是要走的路


查看完整回答
反对 回复 2021-11-02
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

您可以生成一个列表,将其展平并使用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 个以上值的通用循环。您也可以将它与其他字典(带有包含多个值的列表)一起使用。


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信