我有这本字典,我正在尝试提取值
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'
答案 0 :(得分:1)
为什么会遇到TypeError :
当您使用self.printit(**somedict)
调用方法时,传递给函数printit
的第一个参数是self
。所以,如果你定义
def printit(distances, labels):
distances
设置为self
。由于somedict
包含名为distances
的密钥,因此distances
关键字提供两次。
这就是TypeError
被提升的原因。
如何修复:
你的功能
def printit(distances,lables):
使用名为lables
的变量,但dict的拼写为labels
。您可能希望将lables
更改为labels
。
将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]
答案 1 :(得分: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]
>>>