2017-05-03 42 views
-4

我想爲我的工作制作一個應用程序,所以我記下我發送給我的客戶的包裹 ,所以我有我的客戶名單和他們的代碼編號的字典 我想要我的應用程序要導入多個代碼編號將它們與我的字典中的鍵進行比較,並將項目返回....因爲代碼編號不能是整數,我必須將它們作爲一個字符串進行處理,然後將它們與發生器組合起來並獲得結果返回發生器結果

farmcod = { "0039":"ΑΤΣΑΛΗ Μ.","0056":"ΒΑΡΔΙΑΜΠΑΣΗΣ Κ.", 
"0138":"ΒΟΥΜΒΟΥΡΑΚΗ Α.","0047":"ΓΕΩΡΓΟΥΛΑΚΗ Κ.","0087":"ΓΟΥΜΕΝΑΚH 
Κ.","0035":"ΓΥΠΑΡΗ Ε.",} 

def chunker(seq, size): 
return [seq[pos:pos + size] for pos in range(0, len(seq), size)] 

kodfain = input ('pharmacy key : ') 

for group in chunker(kodfain, 4): 

print (group,",",sep="",end='') 

所以如果我輸入006900780054我得到===> 0069,0078,0054,

我的問題是如何ic比較那些3生成器的結果比較他們的字典的鍵,並獲得項目回?

+3

縮進在Python中很重要。你能否正確地縮進你的代碼? – Ben

+2

發生器在哪裏?我沒有看到任何。 –

回答

0
farmcod = {"0039": "ΑΤΣΑΛΗ Μ.", "0056": "ΒΑΡΔΙΑΜΠΑΣΗΣ Κ.", "0138": "ΒΟΥΜΒΟΥΡΑΚΗ Α.", 
      "0047": "ΓΕΩΡΓΟΥΛΑΚΗ Κ.", "0087": "ΓΟΥΜΕΝΑΚH Κ.", "0035": "ΓΥΠΑΡΗ Ε.", } 


# this returns a list, not a generator. Shouldn't matter unless your dataset is huge 
def chunker(seq, size): 
    return [seq[pos:pos + size] for pos in range(0, len(seq), size)] 

kodfain = "006900780054" 

for group in chunker(kodfain, 4): 
    code = farmcod.get(group, None) 
    if code: 
     # do something with the code 
     print(code) 
    else: 
     # it wasn't found 
     print('code not found for', group) 

一些注意事項:

  • 如果速度是非常重要的,你希望你的大部分羣體是在farmcod,你可能想使用一個try-catch塊代替if-else塊。它可能會更快。
  • 您的chunker函數返回一個列表,而不是生成器。如果你的數據集很小,沒關係。如果沒有,研究發電機功能。
+0

您可以完全跳過它,只需執行'code = farmcod.get(group,'code for {}'。format(code))'',然後將其打印出來。 –

+0

@ Ev.Kounis如果你想要做的只是打印它,但是如果你想提示用戶輸入代碼或者做一些錯誤處理(我確信他會想在失敗時做一些特殊的事情case),你必須重新引入'if-else'。 – Ben

+0

@NikolaosGasparis這是一個不同的問題。但它看起來像你想要一個'while'循環。谷歌的'輸入循環python'和mangle你發現,直到它做你想做的:)。 – Ben