我有一本字典,我希望变成一个包含列表的列表,这样我就可以写入csv了,但是我做了什么,它没有用。
我使用sorted(dllist.items())将它们排序为
[(key1, value1), (key2, value2), ... ,(keyN, valueN)]
这就是我所拥有的,
dict = [('aaa', [5787, 40, 1161, 1222]),
('aab', [6103, 69, 810, 907]),
('aac', [3081, 41, 559, 638]),
('aae', [1011000, 191, 411, 430])]
我希望它是
list = [(aaa, 5787, 40, 1161, 1222),
('aab',6103, 69, 810, 907),
('aac', 3081, 41, 559, 638),
('aae', 1011000, 191, 411, 430)]
出错了什么?以及如何最简单地将它作为每行元素的行存储在csv中?
答案 0 :(得分:0)
鉴于sorted
的输出,这样做:
>>> my_dict = [('aaa', [5787, 40, 1161, 1222]), ('aab', [6103, 69, 810, 907]), ('aac', [3081, 41, 559, 638]), ('aae', [1011000, 191, 411, 430])]
>>> my_list = [tuple([i[0]] + i[1]) for i in my_dict]
>>>
>>> my_list
[('aaa', 5787, 40, 1161, 1222), ('aab', 6103, 69, 810, 907), ('aac', 3081, 41, 559, 638), ('aae', 1011000, 191, 411, 430)]
我分别使用my_list
和my_dict
代替list
和dict
,以避免阴影内置名称。
实现这一诀窍的代码:
[tuple([i[0]] + i[1]) for i in my_dict]
# |<- put first item in a list
# |<- join with second item
将每个tuple
中的第一项放入列表中,将连接与元组中已经是列表的第二项连接。在列表解析中对所有元组重复该操作。
鉴于 csv writer
对象,您可以使用:
writer.writerows(my_list)
将所有项目一次性写入 csv 文件。
答案 1 :(得分:0)
您可以添加元组(将它们相互附加),您可以将列表转换为元组。所以,以下内容对我有用:
>>> x = [('a', [1,2,3]), ('b', [4,5,6])]
>>> x
[('a', [1, 2, 3]), ('b', [4, 5, 6])]
>>> y = [(i,) + tuple(j) for i, j in x]
>>> y
[('a', 1, 2, 3), ('b', 4, 5, 6)]
答案 2 :(得分:0)
考虑到我对你的字典看起来的假设,这应该进行你想要的转换并将输出写入CSV文件:
import csv
d = { 'aaa': [5787, 40, 1161, 1222], 'aab': [6103, 69, 810, 907] }
rows = [[k] + v for k, v in sorted(d.items())]
with open("out.csv", "w") as out:
writer = csv.writer(out)
for row in rows:
writer.writerow(row)
# out.csv:
# aaa,5787,40,1161,1222
# aab,6103,69,810,907