代替zip(mydict.values())
, use zip(*mydict.values())
。区别如下:
>>> zip(mydict.values())
[([1, 2],), ([3, 4],), ([5, 6],)]
>>> zip(*mydict.values())
[(1, 3, 5), (2, 4, 6)]
基本上第二个版本做了同样的事情zip([1, 2], [3, 4], [5, 6])
。这就是所谓的解压参数列表 http://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists在文档中。
要强制排序,请使用以下命令:
>>> zip(*([k] + mydict[k] for k in sorted(mydict)))
[('asdf', 'bar', 'foo'), (5, 3, 1), (6, 4, 2)]
这包括标题,所以只需将其传递到writerows()
并删除你的writerow()
调用标题。
当然你可以提供一个key
论证sorted()
那里的功能可以进行您喜欢的任何排序。例如,为了确保与问题中的顺序相同:
>>> order = {'foo': 0, 'bar': 1, 'asdf': 2}
>>> zip(*([k] + mydict[k] for k in sorted(mydict, key=order.get)))
[('foo', 'bar', 'asdf'), (1, 3, 5), (2, 4, 6)]