2017-09-25 8 views
0

私の問題の解決策を探しているのは数日です。 私は引数のセットを持つpythonオブジェクトを持っています。2つのリスト/ pythonからオブジェクト属性を更新する3

私は各行から行ごとにcsvファイルを読みます。引数セットに対応する値を抽出します。これらの値はリストにまとめられています。すべてのcsv行は同じ長さではなく、最低3つの値と最大6つの値を含むことができます。

私は何をしたいです:

class MidiData: 
#constructor 
def __init__(self): 
    self.Track = "0" 
    self.Time = "0" 
    self.Info = "0" 
    self.Channel = "0" 
    self.Note = "0" 
    self.Velocity = "0" 

dictionary=['Track','Time','Info','Channel','Note','Velocity'] 
mylist=["a", "b", "c", "d", "e", "f"] 

#function I want to implement 
myobject.update(mylist) 

myobject.print() 

出力:

Track = "a" 
Time = "b" 
Info = "c" 
Channel = "d" 
Note = "e" 
Velocity = "f" 

私のリストの準備ができたら、私はこのリスト

例と私のオブジェクトの引数の値を更新あなたの助けをありがとう、私は私の説明で完全であることを願っています。

答えて

1

ここにはzipが便利です。あなたはこのような何かを行うことができますupdate方法を実施するためとしてmyobject.update(dict(zip(dictionary, mylist)))

ような何か:

myobject.__dict__.update(dict(zip(dictionary, mylist)) 

をしかし、私は本当に__dict__で何をやってお勧めしません - あなたはダイナミックなフィールドで何かをしたい場合だけ使用しますカスタムクラスではありません。

+0

オーケーによってこれらの属性のすべてを更新するために、ループ内で__setattr__を使用することができますが、どのように 'update'メソッドを実装していますか? –

+0

ありがとう、私は上記のソリューションを実装しました。 –

1

あなたは自分の名前

def update(self, names, values): 
    for name, value in zip(names, values): 
     self.__setattr__(name, value) 
+0

スーパーシンプルなソリューション、ありがとうコリー! –

関連する問題