numpyでcsvファイルを読み込み、(csvファイルのデータが入った)タプルを用いた辞書を作成したい


【はじめに】  
pythonでタプルを用いた辞書の作成を試みているのですが、エラーが起こり、作成できません。  
恐れ入りますが、エラーの改善方法をご教授下さりますと幸いに存じます。  
何卒よろしくお願い申し上げます。

【実現したいこと】  
現在、グラフ理論を勉強しており、その過程で以下のような辞書を作成しております。

[code]

    dicts = {(i_1,j_1):length_1, (i_2,j_2):length_2,..., (i_10,j_10):length_10}
    
    i:出発するnode
    j:到着するnode
    length:iとjの間の距離
    
[/code]

具体的には、添付しておりますtest.csvの数値を代入し、以下のような辞書を作成を目指しております。

[code]

    dicts = {(2,20):100, (4,18):200,..., (20,2):1000}
    
[/code]

【試したこと・発生している問題(エラーメッセージ)】  
該当のソースコードを実行しますと、以下のようなエラーを出力します。  
エラーをネットで調べてみたのですが理解できませんでした。  
numpyに問題があるようですがどうしてもnumpyを使用したく、他のデータを読み込む方法(pandas等)は試しておりません。

[code]

    TypeError: unhashable type: 'numpy.ndarray'
    
[/code]

【該当のソースコード】  
辞書の作成を目指し、以下のようなプログラムを組みました。

[code]

    import numpy as np
    
    data = np.loadtxt("test.csv",      
                      delimiter=",",   
                      skiprows=1,      
                      usecols=(1,2,3) 
                     )
    
    keys = [(data[i:i+1,0:1],data[i:i+1,1:2]) for i in range(0,10)]
    values = [data[i:i+1,2:3] for i in range(0,10)]
    
    dicts={}
    for i in keys:
        for x in values:
           dicts[i] = x
           print(dicts)
    
[/code]

test.csvは以下の通りです。

[code]

    fid i   j   length
    1   2   20  100
    2   4   18  200
    3   6   16  300
    4   8   14  400
    5   10  12  500
    6   12  10  600
    7   14  8   700
    8   16  6   800
    9   18  4   900
    10  20  2   1000
    
[/code]




[teratail にて lehshell 様に回答いただきました](https://teratail.com/questions/357618)
ので以下に共有させていただきます。  
改めまして、ご協力下さりました皆様に感謝申し上げます。

* * *
[code]

    TypeError: unhashable type: 'numpy.ndarray'
    
[/code]

numpy.ndarray は unhashable なので辞書のキーにはできないということです。  
（hashable なものしか辞書のキーにはできません）

このようにすればいいでしょう。  
`range(0,10)` を `range(len(data))` に修正しました。

[code]

    import numpy as np
    
    data = np.loadtxt("test.csv",      
                      delimiter=",",   
                      skiprows=1,      
                      usecols=(1,2,3) 
                     )
    
    # keys = [(int(data[i:i+1,0:1]), int(data[i:i+1,1:2])) for i in range(0,10)]
    # values = [int(data[i:i+1,2:3]) for i in range(0,10)]
    keys = [(int(data[i:i+1,0:1]), int(data[i:i+1,1:2])) for i in range(len(data))]  # 10 削除
    values = [int(data[i:i+1,2:3]) for i in range(len(data))]  # 10 削除
    dic = {n:values[i]  for i,n in enumerate(keys)}
    print(dic)  # {(2, 20): 100, (4, 18): 200, ...}
    
[/code]

