web-dev-qa-db-ja.com

AttributeError: 'set'オブジェクトには属性 'items'がありません

私はpythonに非常に新しいので、私が行くにつれて自分自身を学ぼうとしています(python )。インポートしたモジュールはTkinterとcsvです。質問があれば教えてください。

簡潔にするために、ここにコード全体を掲載するつもりはありませんが、エラー全体を含め、エラーが適用されている行を示します。以下にあるものはすべて、MainAppというクラスにあります。

def SubmitEdit(self):
    self.key=""
    self.val=""
    new_rows = []
    self.changes = {self.key:self.val}
    with open("info.csv",'rb') as f:
        reader = csv.reader(f):
        for row in reader:
            new_row = row
            for field in row:
                if field == "NAME":
                    print "groovy"
            for (self.key,self.val) in self.changes.items():
                new_row = [ x.replace(self.key,self.val) for x in new_row]
            new_rows.append(new_row)
     with open("info.csv","wb") as f:
         writer = csv.writer(f):
         writer.writerows(new_rows)

私はこのコードを別々に書き、プログラムに入れる前に機能することを確認し、完全に機能しましたが、クラスに入れて変更を加えたとき(私は考えました)、コード/変数の行にそれを行う必要がありましたうまくいきませんでした。だから、私はただ間違って何かを修正していると信じるようになります。

エラーは次のとおりです。

Exception in Tkinter callback
Traceback (most recent call last):
    File "C:\Python27\lib\lib-tk\Tkinter.py",line 1536, in__call__
        return self.func(*args)
    File "C:\Python27\draft.py", line 328, in SubmitEdit
        for (self.key,self,val) in self.changes:
AttributeError: 'set' object has no attribute 'items'

328行目は次の行を指します。「または(self.key、self.val)in self.changes.items():」

私は「自己」の有無を変えました(気がします)。すべての変数についてですが、私はそれを動作させることができません。

編集:コードを次のように変更しました:

def SubmitEdit(self):
    new_rows = []
    self.changes = {"MTMA",123}
    with open("info.csv",'rb') as f:
        reader = csv.reader(f):
        for row in reader:
            new_row = row
            for field in row:
                if field == "NAME":
                    print "groovy"
            for (key,val) in self.changes.items():
                new_row = [ x.replace(key,val) for x in new_row]
            new_rows.append(new_row)
     with open("info.csv","wb") as f:
         writer = csv.writer(f):
         writer.writerows(new_rows)

コメント通りですが、それでもまったく同じエラーが発生します。

13
MTMA

最新の更新コードからわかるように-

self.changes = {"MTMA",123}

上記のようにself.changesを定義すると、実際には辞書ではなくセットを定義します。コロンの代わりに '、'(コンマ)を使用したため、実際のコードでは、コロンではなくコンマ自体を使用していると確信しています。

キーとして「MTMA」、値として123を使用して辞書を定義するには、それらの間にコロンを使用します。例-

self.changes = {"MTMA":123}

実際のコードでも同様に行います。

空の辞書が必要な場合は、次のように定義します-

self.changes = {}
26
Anand S Kumar