如何简化Python嵌套字典的CSV生成代码并避免使用join?
问题与解决方案
原始数据
data = { 'A': [{1.0: 133.0}, {4.0: 126.0}], 'B': [{1.0: 153.0}, {4.0: 16.0}], 'C': [{1.0: 9.0}, {4.0: 12.0}] }
期望输出
A, 1.0, 133.0 A, 4.0, 126.0 B, 1.0, 153.0 B, 4.0, 16.0 C, 1.0, 9.0 C, 4.0, 12.0
现有实现代码
with open("super.csv", "w") as f: for k, v in data.items(): for a in v: f.write(k + ", " + "".join('{}, {}'.format(k1,v1) for k1,v1 in a.items()) + "\n")
简化后的代码
由于每个子列表中的字典都仅包含一组键值对,我们可以直接取出这组键值对,结合字符串格式化简化代码,同时避免使用join方法:
方式1:使用f-string(Python3.6+)
with open("super.csv", "w") as f: for key, items in data.items(): for item in items: num, val = next(iter(item.items())) f.write(f"{key}, {num}, {val}\n")
方式2:使用format方法
with open("super.csv", "w") as f: for key, items in data.items(): for item in items: num, val = next(iter(item.items())) f.write("{}, {}, {}\n".format(key, num, val))
说明
next(iter(item.items()))直接取出字典中唯一的键值对,无需遍历所有元素(因为每个字典只有一组键值对)- 用f-string或
format方法替代字符串拼接,代码可读性更强,也避免了join的使用
内容的提问来源于stack exchange,提问作者user22390653
相关产品推荐
相关产品推荐

