2017-08-29 3 views
-1

私はpython経由でpythonファイルにアクセスしています。 Googleシート、次のようになります。 enter image description here(gspread):.get_all_recordsは順序付けられていない辞書を返します

しかし、私は経由でアクセスした場合:

self.probe=[] 
    self.scope = ['https://spreadsheets.google.com/feeds'] 
    self.creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', self.scope) 
    self.client = gspread.authorize(self.creds) 
    self.sheet = self.client.open('Beziehende').sheet1 
    self.probe = self.sheet.get_all_records() 
    print(self.probe) 

それはenter image description here ホー、その結果、彼らはに書かれていると私は同じ順序で結果を得ることができますGoogleのシート? ありがとうございます。

を編集してください。私のプログラムには2つの機能があります: 1.)名前/住所などが既にデータベースに入っているかどうかを確認できます。名前がデータベースにある場合、その人に関するすべての情報が出力されます。 2.)これは、人々の情報をデータベースに追加することができます。

問題:データベース全体がリストに読み込まれ、後ですべて書き戻されます。しかし、それを書き戻すとき、get_all_recordsはそれをランダムな順序で格納するので、順序は乱雑になります。 (これは私が今までに書いた最初のプログラムなので、悪いコーディングを許してください)。

データを順番に取得する可能性があるかどうかを知りたかったのです。しかし、Pythonの辞書は順不同です

def create_window(self): 

    self.t = Toplevel(self) 
    self.t.geometry("250x150") 

    Message(self.t, text="Name", width=100, anchor=W).grid(row=1, column=1) 
    self.name_entry = Entry(self.t) 
    self.name_entry.grid(row=1, column=2) 
    Message(self.t, text="Adresse", width=100, anchor=W).grid(row=2, column=1) 
    self.adr_entry = Entry(self.t) 
    self.adr_entry.grid(row=2, column=2) 
    Message(self.t, text="Organisation", width=100, anchor=W).grid(row=3, column=1) 
    self.org_entry = Entry(self.t) 
    self.org_entry.grid(row=3, column=2) 
    Message(self.t, text="Datum", width=100, anchor=W).grid(row=4, column=1) 
    self.date_entry = Entry(self.t) 
    self.date_entry.grid(row=4, column=2) 
    self.t.button = Button(self.t, text="Speichern", command=self.verify).grid(row=5, column=2) 


    #name 


    #window = Toplevel(self.insert_window) 
def verify(self): 
    self.ver = Toplevel(self) 
    self.ver.geometry("300x150") 
    self.ver.grid_columnconfigure(1, minsize=100) 
    Message(self.ver, text=self.name_entry.get(), width=100).grid(row=1, column=1) 
    Message(self.ver, text=self.adr_entry.get(), width=100).grid(row=2, column=1) 
    Message(self.ver, text=self.org_entry.get(), width=100).grid(row=3, column=1) 
    Message(self.ver, text=self.date_entry.get(), width=100).grid(row=4, column=1) 
    confirm_button=Button(self.ver, text='Bestätigen', command=self.data_insert).grid(row=4, column=1) 
    cancle_button=Button(self.ver, text='Abbrechen', command=self.ver.destroy).grid(row=4, column=2) 



def data_insert(self): 
    new_dict = collections.OrderedDict() 
    new_dict['name'] = self.name_entry.get() 
    new_dict['adresse'] = self.adr_entry.get() 
    new_dict['organisation'] = self.org_entry.get() 
    new_dict['datum'] = self.date_entry.get() 
    print(new_dict) 
    self.probe.append(new_dict) 
    #self.sheet.update_acell('A4',new_dict['name']) 
    self.update_gsheet() 
    self.ver.destroy() 
    self.t.destroy() 

def update_gsheet(self): 
    i = 2 
    for dic_object in self.probe: 
     j = 1 
     for category in dic_object: 
      self.sheet.update_cell(i,j,dic_object[category]) 
      j += 1 
     i += 1 

def search(self): 
    print(self.probe) 
    self.result = [] 
    self.var = self.entry.get()   #starting index better 
    self.search_algo() 
    self.outputtext.delete('1.0', END) 
    for dict in self.result: 
     print(dict['Name'], dict['Adresse'], dict['Organisation']) 
     self.outputtext.insert(END, dict['Name'] + '\n') 
     self.outputtext.insert(END, dict['Adresse']+ '\n') 
     self.outputtext.insert(END, dict['Organisation']+ '\n') 
     self.outputtext.insert(END, 'Erhalten am '+dict['Datum']+'\n'+'\n') 
    if not self.result: 
     self.outputtext.insert(END, 'Name not found') 
     return FALSE 
    return TRUE 



def search_algo(self): 

    category = self.v.get() 
    print(category) 
    for dict_object in self.probe: 
     if dict_object[category] == self.var: 
      self.result.append(dict_object) 
+0

あなたの回答は、デフォルトでPythonで注文されていない辞書のリストです。これを解決するには、最終的な解決策として望むことに依存します。 – zipa

答えて

0

(...私は推測とにかく、おそらく、より効率的である)私は最新のエントリを書くために、オンライン、方法を見つけるために持っているよりも、ない場合。コレクションにはOrderedDictがありますが、なぜこの辞書が必要なのかについての詳細な説明がなくても、何が最善の行動をとるべきかについては言い難いです...

1

私はgspread GoogleスプレッドシートAPIの第三者クライアントですが、get_all_recordsではなくget_all_valuesを使用する必要があります。それはあなたのリストのリストではなく、dictsのリストを提供します。

+0

ありがとう、私はそれを見てみましょう。私は辞書を使うことに決めました。しかし、私は間違って... – user3554329

関連する問題