2014-02-07 4 views
1

У меня есть словарь с объектами, хранящимися как значения. Как я могу получить доступ и распечатать атрибуты определенного объекта? Например,Python: Доступ к атрибутам объектов из объектов, хранящихся в словаре

dict={0:obj0, 1:obj1, 2:obj2, 3:obj3} 

Я хочу напечатать obj1.attribute. Я пробовал:

print (dict[key]).attribute 

не имеет смысла. Я не могу просто получить доступ к объекту напрямую, потому что я не присвоил его переменной. Эта программа автоматически генерирует объекты и помещает их в dict с автоматически сгенерированным ключом, что избавляет меня от ручной присвоения произвольного количества значений. Если кто-то знает лучший способ рассказать этот вопрос, пожалуйста, продолжайте. Спасибо огромное!

EDIT: имя моего слова не является «dict», и мой атрибут не назван «атрибутом». Они используются просто для ясности.

EDIT: Хорошо, вот что происходит. Я использую Tkinter для получения контактной информации через поля ввода. Я использую этот вход, чтобы создать объект с именем атрибутов, адрес и т.д. Так,

class User(): 

    def __init__(self, name='', street='', city='', state='', zip=''): 
     self.name=name 
     self.street=street 
     self.city=city 
     self.state=state 
     self.zip=zip 

###### code below is outside of class User ##### 

    def make(name='', street='', city='', state='', zip='', count=0): 
     dic[count]=User(name='', street='', city='', state='', zip='') 

Есть ли причина того, что «DIC [0] .name» будет возвращать пустую строку?

+0

Вы используете 'getattr':' getattr (d [key], attribute_name) '. – Blender

+0

Это не работает, к сожалению. – johnnyRose

+1

Можете ли вы опубликовать * функциональный * пример своей проблемы? Я не понимаю ваш вопрос только с кодом, который вы предоставили. – Blender

ответ

1

Изменить этот

def make(name='', street='', city='', state='', zip='', count=0): 
    dic[count]=User(name='', street='', city='', state='', zip='') 

в

def make(name='', street='', city='', state='', zip='', count=0): 
    dic[count]=User(name=name, street=street, city=city, state=state, zip=zip) 

В случае, если ваш атрибут, содержащий пробелы или пустая строка, вы можете сделать это в некоторых случаях, это поможет вам знать, если что-то есть ,

print "<%s>" % my_dict[key].attribute 

Если вы видите <> вероятно, что это пустая строка, если вы видите что-то еще между ними, это может быть пробелы вкладки или символы новой строки или что-нибудь, что не видно.

Другая возможность заключается в том, что по некоторым причинам attribute, который вы получаете, является объектом, который переопределяет __repr__ или __str__ и возвращает пустую строку. Не зная, с чем вы имеете дело, очень сложно помочь больше.

+0

Мои объекты не сохраняются как dicts, они сохраняются как значение ключа. Таким образом, мой ключ может быть x, а значение - myObject. Я знаю, какие атрибуты присутствуют, я просто не могу их распечатать. Он не создаст ошибку, он просто будет пустым. Если я попытался установить напечатать "Hello", myDict [key] .attribute и он просто печатает "Hello". – johnnyRose

+0

@Johnny_Rose Что означает 'type (my_dict [key] .attribute)' yield? Также, если вы заглянете в 'dir (my_dict [key])' это атрибут, который вам нужен? Вы считали, что атрибут может возвращать пустую строку? –

+0

type (my_dict [key] .attribute) возвращает строку. Я рассмотрел пустую строку, но этот атрибут «имя», и я точно знаю, что в нем есть строка символов. – johnnyRose

Смежные вопросы