Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,通过列将列表添加到csv,并从其他数据中动态提取列表_Python_List_Csv - Fatal编程技术网

python,通过列将列表添加到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)] 但我的列表

我的问题是:我想按列向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)]

但我的列表是从其他数据源动态提取的, 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,你在最后一行缺少一个右括号。嗨,非常感谢,我让它工作了,没有列顺序,但没关系,我可以手工完成。