python - 将具有一个键和两个值的字典写入 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))]
解决方案
您可以生成一个列表,将其展平并使用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 个值的通用循环。您也可以将它与其他字典(包含多个值的列表)一起使用。
推荐阅读
- routes - 我可以在具有默认值的段上使用带有正则表达式约束的 RouteAttribute 吗?
- react-native - 为 png 图像提供高度和宽度时,在反应原生时会失去质量
- grouping - ActiveMQ Artemis 消息分组领导选举
- cloud-foundry - 用于云代工的 BaseX 服务代理
- android - APK文件res目录文件同名
- c++ - 寻找提高 Astar 寻路算法 boost 图速度的方法
- sqlite - SQLAlchemy/FastAPI:TestClient 如何测试序列(使用 sqlite)
- python - 如何在 python 中设置 pyqt5 按钮的焦点?
- codenameone - 工具栏与组件的标签重叠
- flutter - Flutter 中文本和布局周围的空间