2012-02-07 9 views
0

私はリストが列を表すリストの辞書を持っています。すべてのリストは同じ長さであり、リストの数は可変です。私は列のリストを行のリストに変換したい。行列が完全であるという辞書を終わらせる必要はありません。ただし、numpyは使用できません。行のリストへの列のリスト

は、たとえば:セットアップは、ここに魔法を行うとcolsの最初の要素が行に今ある次

[(1, 'A', 'J'), (2, 'B', 'K'), (3, 'C', 'L'), (4, 'D', 'M'), (5, 'E', 'N'), (6, 'F', 'O')] 

お知らせを取得し、この

>>> A = [ 1 , 2 , 3 , 4 , 5 , 6] 
>>> B = ["A", "B", "C", "D", "E", "F"] 
>>> C = ["J", "K", "L", "M", "N", "O"] 
>>> d = {"One": A, "Two": B, "Three": C} 

ようになります。今すぐ私はこれを得ることができます

>>> zip(d["One"], d["Two"], d["Three"]) 

しかし、これは辞書のエントリの数が一定だった場合にのみ動作します。辞書エントリの数が可変であればどのようにすればいいですか?私ははっきりしていると思う。

+0

辞書内のキーの順序は重要ですか?つまり、キーは本当に「1」、「2」、「3」で、通常の順序で使用したいのですか? –

+0

@Sven Marnach順序は関係ありません。 – Jeff

+0

[A Transpose/Unzip Function in Python]の複製が可能です(http://stackoverflow.com/questions/19339/a-transpose-unzip-function-in-python) –

答えて

2

Unpacking Argument Listsのドキュメントをご覧ください。 *を関数の引数である反復可能なものの前に置くことによって、その反復可能な要素を引数として呼び出されます。たとえばzip(*['ab', 'cd', 'ef'])zip('ab', 'cd', 'ef')になります。あなたが任意のサイズの辞書のあなたのzip形式のリストを生成しますが、辞書は順不同ですので、あなたが例えば、結果の列グループのための順序として使用する別のリストを提供する必要があることに注意することができ、この方法を使用して

>>> A = [ 1 , 2 , 3 , 4 , 5 , 6] 
>>> B = ["A", "B", "C", "D", "E", "F"] 
>>> C = ["J", "K", "L", "M", "N", "O"] 
>>> d = {"One": A, "Two": B, "Three": C} 
>>> order = ["One", "Two", "Three"] 
>>> zip(*[d[k] for k in order]) 
[(1, 'A', 'J'), (2, 'B', 'K'), (3, 'C', 'L'), (4, 'D', 'M'), (5, 'E', 'N'), (6, 'F', 'O')] 

列の順序が重要でない場合は、Sven's solutionを使用できます。これは非常に簡潔ですが、タプルの順序は任意です。

4

辞書項目の順序が重要でない場合は、望ましい結果を得るために

zip(*d.values()) 

を行うことができます。