2

私はこの辞書を持っていて、値を抽出しようとしています

dict = {'distances': array([ 870.99793539]), 'labels': array([2])}

使ってみた

self.printit(**dict)

def printit(distances,labels):         
    print distances
    print labels

しかし、私はエラーが発生しています

TypeError: printit() got multiple values for keyword argument 'distances'
4

2 に答える 2

1

タイプミスがありました:lablesの代わりにlabels. これはうまくいきます:

from numpy import array

my_dict = {'distances': array([ 870.99793539]), 'labels': array([2])}

def printit(distances,labels): # changed lables to labels      
    print distances
    print labels # changed lables to labels

printit(**my_dict)

結果:

[ 870.99793539]
[2]
>>>
于 2013-07-06T19:27:07.500 に答える
1

TypeError が発生した理由:

でメソッドを呼び出す場合self.printit(**somedict)、関数に渡される最初の引数printitは ですself。したがって、定義すると

def printit(distances, labels):

distances設定されていselfます。somedictというキーが含まれているためdistancesdistancesキーワードが 2 回指定されています。それTypeErrorが引き上げられた理由です。


修正方法:

あなたの機能

def printit(distances,lables):  

という名前の変数を使用しますlablesが、辞書には というスペルのキーがありますlabels。あなたはおそらくに変更したいでしょlableslabels


selfの最初の引数として追加しprintitます。

def printit(self, distances, labels): 

最初の引数を呼び出すのは単なる慣例です。別の名前を付けることもできますが (推奨されませselfん) 、呼び出してから変数名を指定する必要があります。

self.printit(...)を呼び出しますprintit(self, ...)


例えば、

import numpy as np
class Foo(object):
    def printit(self, distances, labels): 
            print distances
            print labels

somedict = {'distances': np.array([ 870.99793539]), 'labels': np.array([2])}
self = Foo()
self.printit(**somedict)

版画

[ 870.99793539]
[2]

于 2013-07-06T19:24:23.097 に答える