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

Python 通过字符串键获取存储在dict中的对象,python,python-2.7,object,dictionary,Python,Python 2.7,Object,Dictionary,我成功地将按键列表打印到屏幕上,然后要求用户键入一个按键名称以获取特定对象。这就是我认为它的工作方式: print dict['bob'] 这将输出使用“bob”键存储的对象,但它没有。我假设出现这个问题是因为我存储的是对象,而不是字符串或整数。如果输入的名称是键,它只会再次打印名称而不是对象,如果它不是键,则会抛出错误。这样做的最终结果是获得一个指定的对象,以便用户可以查看该对象的属性 运行上述语句时,它只会将键打印到屏幕上: bob 打印我的字典是这样的 {'Sal': <Empl

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

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>}
{'Sal':,'bob':,'jack':,'alexa':,
“戴夫”:“缝纫”
':,'tam':}

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

如果字典包含您创建的类的实例,并且您希望从这些对象中提取相关信息,那么您需要在类中创建一个函数来执行此操作,并在以后调用它


假设您有一个
Product
类型的对象,假设
Product
是您创建的类。您在词典中存储了多个产品。你想得到什么?产品名称?名称、价格和描述?或者可能是类名?Python无法理解您的意图,因此您可以创建一个特定的方法来完成您希望它做的事情,或者使用
\uuu str\uuu()

我认为您需要的是
dir([object])

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


希望这是您想要的。

看起来您只是被以下事实误导了:
print obj
打印调用对象的
\uu str\uuu
\uu unicode\uu
方法的结果。因此,当转换为字符串时,字典中键“bob”下的对象就是“bob”

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

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

不确定是指在类定义中定义的对象属性,还是指使用
dir()可以找到的名称。
在这两种情况下,如果对象类定义了
\u str\u
\u repr\u
方法,则在使用print时将调用这些方法。如果希望用户能够查看对象空间中的名称,只需使用
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
),您只需执行以下操作:

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


希望这有点道理。

你的意思是什么?那句话返回什么?dict中有什么?你是如何定义它的?如果你打印dict,你会得到什么?那么这就是你在dict中存储在键
bob
下的内容。如果你认为你应该有不同的东西,你应该首先展示你是如何存储它的。我已经说过对象在dict中,什么是打印出来的。我不清楚我如何定义它的意思。@DanielRoseman这是不正确的,因为将字典打印到屏幕上表明情况并非如此。
print(d['item'].attr)
print(d['item'].name)