2015-04-17 15 views
-2

我一直在使用這個,但似乎並不適用於每次添加第二個條目後進行搜索的多個條目,如果我嘗試搜索第一個入口就是第二個入口。這將是一個修復什麼是一個字典的好搜索功能

 for i in range(len(gclients)): 
      record = gclients[i] 
      if record["Name"].lower() == search1: 
       if record["Surname"].lower() == search2: 
        recordfoundc = True 


      for k,v in record.iteritems(): 
       resname = record["Name"] 
       resSurname = record["Surname"] 
       resnum = record["Phone Number"] 
       resjob = record["Job"] 
       resaddress = record["Address"] 
       resemID = record["Employee ID"] 

     if recordfoundc: 
      print"You have just found",resname,resSurname,resnum,resjob, resaddress, resemID 
      recordfoundc = False 

     else: 
      print "Client not found" 
+3

問題尋求幫助調試(「?爲什麼不是這個代碼工作」)必須包括所期望的行爲,一個特定的問題或錯誤,並在最短的代碼要重現它在問題本身。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – jurgemaister

+0

移動'for k,v in record.iteritems():'代碼在if循環內(在'recordfoundc = True'後面),因爲當找到用戶細節時只有你必須定義這個變量。也使用'break'語句。 –

+0

請在'gclients:'中用'for record in gclients替換'in range(len(gclients)):record = gclients [i] :-) – mkrieger1

回答

2

相關代碼:

移動for k,v in record.iteritems(): for循環代碼中if looprecordfoundc = True之後),因爲當員工發現,那麼只有你必須得到來自records員工詳細信息。

無需for k,v in record.iteritems():聲明的,因爲我們直接訪問從記錄鍵和值,我們沒有使用可變k並在代碼v

還用break聲明。

代碼看起來喜歡 - :

recordfoundc = False 
for i in range(len(gclients)): 
    record = gclients[i] 
    if record["Name"].lower() == search1 and record["Surname"].lower() == search2: 
     recordfoundc = True 
     #- Get Details of Employee. 
     resname = record["Name"] 
     resSurname = record["Surname"] 
     resnum = record["Phone Number"] 
     resjob = record["Job"] 
     resaddress = record["Address"] 
     resemID = record["Employee ID"] 

     break 

if recordfoundc: 
    print"You have just found",resname,resSurname,resnum,resjob, resaddress, resemID 
else: 
    print "Client not found" 

的Python允許寫多重條件如果循環andor關鍵字。

演示:

>>> a = 1 
>>> b = 2 
>>> c = 3 
>>> if a==1 and b==2 and c==3: 
... print "In if loop" 
... 
In if loop 
>>> 

Break語句

使用break語句從任何退出的同時,當任何條件得到滿足。

在我們的情況下,員工的名字和姓氏在記錄中匹配時,不需要檢查其他記錄項目。

演示:打破for loop當價值i3

>>> for i in range(5): 
... print i 
... if i==3: 
...  print "Break for loop." 
...  break 
... 
0 
1 
2 
3 
Break for loop. 

如何從字典中獲得價值。

演示:

>>> record = {"name": "test", "surname":"test2", "phone":"1234567890", "Job":"Developing"} 
>>> record["name"] 
'test' 
>>> record["surname"] 
'test2' 
>>> record["Job"] 
'Developing' 
>>> 
+0

謝謝,這有助於很多,因爲你可以告訴我仍然需要學習一些東西 – Mic

+0

@Mic:歡迎PLZ再次看到我更新了答案。免費問我在stackoverflow和我的問題(電子郵件[email protected]) –

+0

好吧,再次感謝我會如果我需要幫助 – Mic

0

您完成後,您的打印件發生在for循環因此您的結果變量只是你寫的最後的(而這些僅需要被寫入該記錄是否匹配,如尖在評論中)。您需要在for內部打印或將結果添加到列表中以便以後打印。和/或如建議的那樣,如果你只想要第一場比賽,就從循環中解脫出來。