通过字符串键获取存储在dict中的对象

时间:2014-08-03 14:23:44

标签: python python-2.7 object dictionary

我成功地将一个键列表打印到屏幕上,然后要求用户键入一个键名来获取特定对象。这是我认为它的工作方式:

print dict['bob']

这将输出用'bob'键存储的对象,但它不会。我假设这个问题出现是因为我存储对象而不是字符串或整数。如果输入的名称是一个键,它只会再次打印名称而不是对象,如果它不是键,则会抛出错误。最终结果是获取指定的对象,以便用户可以查看对象属性。

当上面的语句运行时,它只是将键打印到屏幕上:

bob

打印我的字典看起来像这样

{'Sal': <Employ_Class2.Employee object at 0x01EE38F0>, 'bob': <Emplo
y_Class2.Employee object at 0x01EE3930>, 'jack': <Employ_Class2.Employee o
bject at 0x01EE3990>, 'alexa': <Employ_Class2.Employee object at 0x01EE3870>,
'dave': <Employ_Class2.Employee object at 0x01EE3910>, 'sew
': <Employ_Class2.Employee object at 0x01EE3950>, 'tam': <Employ_Class2.Em
ployee object at 0x01EE39D0>}

4 个答案:

答案 0 :(得分:0)

如果要查看对象属性的名称,请使用dir()

如果字典包含您创建的类的实例,并且您想要从这些对象中提取相关信息,则需要在您的类中创建一个函数,该函数执行该操作并稍后调用它。

假设您有Product类型的对象,因为Product是您创建的类。您可以在词典中存储多个产品。你想要什么回来?产品名称?名称,价格和描述?或者也许是班级名字? Python无法弄清楚你的意图,因此你需要创建一个特定的方法来完成你想做的事情,或者使用__str__()

答案 1 :(得分:0)

我认为你想要的是dir([object])

Without arguments, return the list of names in the current local scope. With an argument, attempt to return a list of valid attributes for that object.

因此,根据文档,您可以使用dir()来获取该对象的属性。

希望这是你想要的......

答案 2 :(得分:0)

看起来你只是被print obj打印调用对象的__str____unicode__方法的结果所误导。因此,当转换为字符串时,键“bob”下的字典中的对象只是“bob”。

正如其他人所说,如果您只是想在该键下打印对象的属性,请使用dir

obj = dict['bob']
print dir(obj)

答案 3 :(得分:0)

不确定您是引用您在类定义中定义的对象属性,还是使用dir().找到的名称。在任何一种情况下,如果您的对象类具有__str__或{{1定义的方法,在使用print时将调用这些方法。如果您希望用户能够在对象空间中查看名称,请使用__repr__。如果您希望它们访问您在类定义中设置的属性和属性,请直接访问它们(或者通过您创建的任何方法来访问它们:

dir()

导致class Test: attr = 'item' # this is a class attribute def __init__(self): self.name = 'Me' # this will be an instance variable/property def __str__(self): return self.name d = {} # example does not need a dict but using one to relate to posted question d['item'] = Test() print(d['item']) 被打印到屏幕:

self.name将打印出对象命名空间中的所有名称,包括方法和属性。

要打印您创建的属性(上面为dir(d['item'])attr),您只需执行以下操作:

self.name

因此,在这种情况下,您的用户应该直接访问dict对象:print(d['item'].attr) print(d['item'].name)

希望有道理。