python,通过列将列表添加到csv,并从其他数据中动态提取列表
我的问题是:我想按列向csv文件中添加一些列表,例如,我有以下列表:python,通过列将列表添加到csv,并从其他数据中动态提取列表,python,list,csv,Python,List,Csv,我的问题是:我想按列向csv文件中添加一些列表,例如,我有以下列表: [1, 2, 2, 3, 3, t1] [0, 3, 3, 2, 3, t2] [5, 3, 2, 1, 2, t3] 将它们添加到csv文件,如下所示: 1 0 5 2 3 3 2 3 2 3 2 1 3 3 2 t1 t2 t3 我查看了一些其他帖子以使用zip: zip(a,b,c)提供了一个行列表:[(1,4,7),(2,5,8),(3,6,9)] 但我的列表
[1, 2, 2, 3, 3, t1]
[0, 3, 3, 2, 3, t2]
[5, 3, 2, 1, 2, t3]
将它们添加到csv文件,如下所示:
1 0 5
2 3 3
2 3 2
3 2 1
3 3 2
t1 t2 t3
我查看了一些其他帖子以使用zip:
zip(a,b,c)提供了一个行列表:[(1,4,7),(2,5,8),(3,6,9)]
但我的列表是从其他数据源动态提取的,
e、 g.从字典中:
for x, y in cpu_dict.items():
y.append(x)
# y is a number list [1,2,2,3,3] etc. and x is a string 't1' etc.
字典cpu_dict类似于:
{'t1': [3,3,4,2,2,1,3], 't2': [2,4,3,2,1,2,3], 't3': [2,2,3,4,5,2,3] ... many more...}
所有号码表的长度都相同。在这种情况下,我应该如何使用zip()
有什么帮助吗?提前谢谢
=================================
得到了解决方案,谢谢kroolik。使用
izip
:
>>> cpu_dict = {'t1': [1,2,3,4,5], 't2': [6,7,8,9,10], 't3': [11,12,13,14,15]}
>>> list(izip(*(y + [x] for x, y in cpu_dict.iteritems())))
[(6, 11, 1),
(7, 12, 2),
(8, 13, 3),
(9, 14, 4),
(10, 15, 5),
('t2', 't3', 't1')]
y+[x]
计算结果为[1,2,3,4,5,'t1'],[6,7,8,9,10,'t2'],[11,12,13,14,15,'t3']
。
列的顺序是任意的(这就是常规dict的工作方式)
然后可以将其馈送到csv.writerow
,或将每一行分别馈送到csv.writerow
如果要对列进行排序,请尝试以下操作:
>>> cpu_dict = {'t1': [1,2,3,4,5], 't2': [6,7,8,9,10], 't3': [11,12,13,14,15]}
>>> sorted_items = sorted(cpu_dict.iteritems(), key=lambda x: int(x[0][1:]))
>>> list(izip(*(y + [x] for x, y in sorted_items)))
[(1, 6, 11),
(2, 7, 12),
(3, 8, 13),
(4, 9, 14),
(5, 10, 15),
('t1', 't2', 't3')]
使用动态列表数量的izip
的关键是。它允许您将一组值转换为位置参数,即:
foo(*[1,2,3,4,5,6,object()]) == foo(1,2,3,4,5,6,object())
你能准确地显示什么是cpu指令吗?您想在示例中使用zip添加到y列表中吗?我不明白为什么不能使用zip解决方案进行转置字典没有顺序;您希望字典值按什么顺序成为列?我在字典中添加了样式。我认为zip()可以处理可用的列表,并将它们合并在一起。如果我把不同的键放在底部,它们会出现在同一行中,那么订购就不重要了。谢谢你的回复。我更改了代码,需要添加以下内容:从itertools导入*。但是列表仍然没有正确添加到csv中。@user2068965,您的代码现在看起来怎么样?简单
writer.writerows(izip(*(y+[x]表示x,y表示排序的_项))
应该可以。嗨,我还是没弄好,我也不确定我的编写器部分。它给出了一个错误:SyntaxError:无效语法。在dropbox中链接到我的代码:@user2068965,你在最后一行缺少一个右括号。嗨,非常感谢,我让它工作了,没有列顺序,但没关系,我可以手工完成。