2016-12-04 5 views

答えて

0

dictは、ハッシュ可能型として設定されたキーを持つ必要があります。

ハッシュ可能でない型(numpy.ndarray)を使用して型を作成しようとしています。

これは、このエラーが発生する理由です。

あなたの場合、あなたができる:

x = dict(itertools.izip(tuple(ls),rs)) 
+0

代わりに何を使用しますか?私はタプルとして結合する必要があるxlsxファイルの列を持っています – Hassaan

+0

@Hassaanタプルのようなハッシュ可能な型を使用する必要があります。例えば 'x = dict(itertools.izip(tuple(ls)、rs))' – user312016

+0

ありがとうあなたの助けのためにたくさん – Hassaan

2

あなたが最初の列が辞書のようにキーを立ってハッシュ化されていないnumpyの配列を含んでいますitertools.izip(ls,rs)を使用しています。

代わりにtupleのようなハッシュ可能な反復可能文字に変換する必要があります。また、2番目の軸に沿って2つのnumpy配列を連結する場合は、itertools.izip()の代わりにnp.column_stack()を使用することをお勧めします。

また、オブジェクトが何であるか、それが何を返すのかは不明です。おそらく、より適切な結果を出すために、その呼び出し可能オブジェクトを変更することができます。そこ

+0

numpy配列をハッシュ可能にするにはどうすればいいですか?または、どのデータ構造をキーとして使用すべきですか? – Hassaan

+0

@Hassaan *タプルのようなハッシュ可能なiterableに変換する必要があります。また、2番目の軸に沿って2つのnumpy配列を連結したい場合は、itertools.izip()の代わりにnp.column_stack()を使用する方が良いでしょう。* – Kasramvd

+0

遅くなって申し訳ありません。ありがとうございます – Hassaan

0

ls = np.empty 
ls =getColA() 

np.emptyことはありませんがいくつかの関数です。あなたはそれをlsに割り当てます。 getColA()の結果をlsに割り当てます。それは最初の割り当てを消去します。最初の割り当てでls変数が配列として定義されていると思いますか?これはPythonの仕組みではありません。変数には型がありません。

x = dict(itertools.izip(ls,rs)) 

getColA()が返すものは教えてくれませんでしたが、エラーは配列であることを示しています。 1d? 2d?

辞書建物のこの種は、1Dアレイ(私はPY3を使用しています)2Dのzipは、配列の行を返すためだ2D

In [498]: dict(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3)))) 
... 
TypeError: unhashable type: 'numpy.ndarray' 

In [497]: dict(itertools.zip_longest(np.arange(3),np.arange(10,13))) 
Out[497]: {0: 10, 1: 11, 2: 12} 

ではなく、で動作します行自体は配列です:

In [499]: list(itertools.zip_longest(np.arange(6).reshape(2,3),np.ones((2,3)) 
    ...:)) 
Out[499]: 
[(array([0, 1, 2]), array([ 1., 1., 1.])), 
(array([3, 4, 5]), array([ 1., 1., 1.]))] 

なぜあなたは使いたいですか?辞書キーとしての配列?

+0

getColA()は、Excelファイルのセルからいくつかのデータの配列を返しています。私は、異なるExcelファイルの2つの列を組み合わせて、それらを辞書として使用したいと考えました。 – Hassaan

+0

あなたが言ったように、私はPythonには新しく、構造と構文を保持しようとしています。 np.emptyの割り当てはその型を定義しようとしましたが、変数がどのようにPythonで動作するのか混乱しました。 – Hassaan

+0

具体的な例を実数と配列で与える必要があります。どのような辞書のように見えるのですか? – hpaulj

関連する問題