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

为什么你得到一个 TypeError

当您使用 调用方法时self.printit(**somedict),传递给函数的第一个参数printitself。所以如果你定义

def printit(distances, labels):

设置distancesself。由于somedict包含一个名为 的键distances,因此该distances关键字被提供了两次。这就是为什么TypeError要提出。


如何修复它:

你的功能

def printit(distances,lables):  

使用一个名为 的变量lables,但 dict 有一个拼写的键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 回答
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 回答