在python中解压缩字典并获取值

时间:2013-07-06 19:18:40

标签: python dictionary iterable-unpacking

我有这本字典,我正在尝试提取值

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'

2 个答案:

答案 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]
>>>