2016-10-08 26 views
2

こんにちは私はforループを使って辞書にある配列の束をコンパイルしようとしています。2つの配列を配列のリストにマージする

基本的に私は簡略化した形で持っているもの:それは与えるもの

dict['w1']=[1,2,3] 
dict['w2']=[4,5,6] 
dict['w3']=[7,8] 

x = [] 
for i in range(3): 
    x = np.concatenate([x],[dict['w'+str(i+1)].values],axis=0) 

x = [1,2,3,4,5,6,7,8] 

私が欲しいもの:

x = [[1,2,3],[4,5,6],[6,7]] 

私はforループを使用したいので、私はあまりにも多くの配列を 'コンパイル'し、それらのキーを1つ1つは非常に非効率的になるでしょう。この方法で、作成した配列を使ってボックスプロットを直接プロットすることができます。

ループ要件はありませんが、それでも解決策はありません。 Link

+0

あなたがnumpyの配列とその解決策を達成することができなくなり、すべての列と行はnp.arrayで同じ大きさでなければなりません。それはあなたが混乱していると指摘されている配列とPythonのリストが同じではないと思われるので、あなただけのリストを使用する場合numpy関数(配列で動作)を使用しないでください。 – jadsq

+1

期待されるo/pの最後の要素は代わりに '[7,8]'でなければなりません。 – Divakar

+0

また、私はあなたの質問の他の部分からのループを避けることを望んでいることを知っています。この行以外は、「私はforループを使用したいです...」。タイプミス? – Divakar

答えて

2

読解:

# using name as "dict" is not proper use "_dict" otherwise. 
dict['w1']=[1,2,3] 
dict['w2']=[4,5,6] 
dict['w3']=[7,8] 

x = [dict["w"+str(i)] for i in range(1, 4)] 

は、出力を与える:あなたがリストとないdictionarysを意味する場合は、ジップコマンドの

[[1, 2, 3], [4, 5, 6], [7, 8]] 
+0

これは魅力のように機能します!私はしかし質問があります。私は 'w01'、 'w02' ....... 'w10'のように辞書内のキーを持っています。したがって、値が '10'になるとわずかな問題が発生します。上に書いたコードに 'if'を含めることは可能ですか? – xplodnow

+0

あなたはComprehensionsで条件を使うことができます。これは、 ''条件== True else x2 ''のようなもので、[x1のx1のようなものになります。 –

0

ちょうどappendの項目をリストに追加します。

x = [] 
for i in range(1, 4): 
    x.append(dict['w' + str(i)]) 
1

一つのアプローチは、キーに基づいてargsortインデックスを取得するには、次のようになります。0range開始はあなたが開始値を指定し、排他的境に終了値を扱うしていない場合という、ところで、注意してくださいなどそう、これらの指標を使用して、辞書のうち要素/値を並べ替える - あなたが出力としてリストが必要な場合

np.take(dict.values(),np.argsort(dict.keys())) 

を、.tolist()を追加します。

サンプル実行 -

In [84]: dict 
Out[84]: {'w1': [4, 8, 2, 1], 'w2': [1, 3, 8], 'w3': [3, 2]} 

In [85]: np.take(dict.values(),np.argsort(dict.keys())) 
Out[85]: array([[4, 8, 2, 1], [1, 3, 8], [3, 2]], dtype=object) 

In [86]: np.take(dict.values(),np.argsort(dict.keys())).tolist() 
Out[86]: [[4, 8, 2, 1], [1, 3, 8], [3, 2]] 
0

探しています。

Zipは(W1、W2、W3)

関連する問題