2016-10-10 9 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 

Iを明らかにうまくいかなかったこのような試み:

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

これを達成する方法はありますか?

+0

'__dict__'を試したいかもしれないと思う

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

を探しています。 'object .__ dict__'はそれを行うべきです。 –

+0

{'name': 'CreatedObjectTwo'、 'parameters':(<0x7f248d846150>の)} – Hatox

+0

のようなものが返されます。あなたの例から、 'self.ParameterOne'のように名前を付けたいと思っていました。実際に達成しようとしていることは何ですか? –

答えて

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

あなたは数字のために英語の単語を取得したい場合、これは、あなたを{parameter0: 'Value 0', ...}を与えるだろう。そのための独自の機能を転がしたりinflectなどの外部パッケージを使用するかのいずれかがあるでしょう。

ちょうど観測ですが、ほとんどの辞書は文字列をオブジェクトにマッピングしますが、それ以外の方法ではありません。このようにやっている理由はありますか?

EDIT:あなたの質問を読み直す

が、あなたは私があなたの代わりに、オブジェクト上の

data = {parameter.name: parameter.value for parameter in object.parameters} 
関連する問題