2013-07-06 4 views
2

У меня есть этот словарь, и я пытаюсь извлечь значенияраспаковка словаря в Python и получать значения

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

Что 'prediction'? Вы попробовали просто 'print dict.значения() '? – BrenBarn

ответ

1

Почему вы получали TypeError:

Когда вы вызываете метод с self.printit(**somedict), первым аргументом, переданным функции printit, является self. Так что, если вы определяете

def printit(distances, labels): 

distances установлен в self. Так как somedict содержит ключ с именем distances, ключевое слово distances поставляется два раза. Вот почему поднимался TypeError.


Как это исправить:

Ваша функция

def printit(distances,lables): 

использует переменную с именем lables, но ДИКТ имеет ключ по буквам 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] 

+0

thanq очень много для ответов ур. помогли много – rlvamsi

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] 
>>> 
Смежные вопросы