2016-10-10 62 views
1

字典我有这些对象:把同一类的对象与不同的密钥的Python

class Object(object): 

    def __init__(self, name, *parameters): 
     self.name = name 
     self.parameters = parameters 

    def name(self): 
     return self.name 

    def parameters(self): 
     return self.parameters 

class Parameter(object): 

    def __init__(self, name, value): 
     self.name = name 
     self.value = value 

我的目的是让在字典1个对象的所有参数,但它需要落得这样:

{ParameterOne: "ValueOne", ParameterTwo: "ValueTwo"} 

因为我必须要能够给的参数不同的名字,我不能做这样的:

class Parameter(object): 

    def __init__(self, value): 
     self.ParameterOne = value 

我尝试它这样,这显然没有工作:

data = {} 
    for parameter in object.parameters: 
     data.update(vars(parameter)) 

有没有什么办法可以做到这一点?

+0

'__dict__'。 'object .__ dict__'应该这样做。 –

+0

返回类似 {'name':'CreatedObjectTwo','参数':(<0x7f248d846150>的参数对象,<参数对象0x7f248d846810>)} – Hatox

+0

道歉。从你的例子中,我认为你想能够在'self.ParameterOne'中命名它们。你究竟在努力实现什么? –

回答

0
data = {parameter: ''.join(['Value ', str(index)]) 
     for index, parameter in enumerate(object.parameters)} 

这会给你{parameter0: 'Value 0', ...}如果你想要得到的英文单词为数字,你,将不得不要么推出自己的功能,或使用外部包像inflect

只是一个观察,但大多数字典将字符串映射到对象,而不是其他方式。你有这样做的理由吗?

编辑:

重读你的问题,你在找

data = {parameter: parameter.name for parameter in object.parameters} 

我想你可能想尝试的对象,而不是

data = {parameter.name: parameter.value for parameter in object.parameters}