2013-12-16 275 views
2

當我嘗試迭代此字典時,它只打印出兩次以「2222」作爲關鍵字的客戶。我不知道爲什麼會發生這種情況。在過去,我試圖爲客戶c1和c2使用不同的變量(而不僅僅是c),但是這打破了使用for循環打印字典的目的。在Python中迭代字典

Dict = {} 
c = Customer.Customer("1111","Jake","Main St","Happy Valley","CA","96687","8976098765") 
Dict[c.getCNumber()] = c 
print(Dict[c.getCNumber()].getCNumber()) 
c = Customer.Customer("2222","Paul","3342 CherrySt","Seatle","WA","98673","9646745678") 
Dict[c.getCNumber()] = c 
print(Dict[c.getCNumber()].getCNumber()) 

for key in Dict.keys(): 
    print("***Customer***") 
    print("Customer Number: " + c.getCNumber) 

此打印:

***Customer*** 
Customer Number: 2222 
***Customer*** 
Customer Number: 2222 

我如何得到它遍歷並有客戶1111首,然後客戶2222秒?

+0

'字典是**不**訂購。您必須先將元素複製到列表中,對列表進行排序並輸出結果。另外,在你的輸出中沒有'1111'。 – Bakuriu

+0

你的代碼有點混亂;你可能想驗證它是你想要寫的。另外,顯示'Customer.Customer'。 –

+0

這個問題不是訂單,它是遍歷字典,並能夠打印每個客戶的信息 – user3106444

回答

2

這正是你告訴你的循環要做的事情:遍歷一個鍵集,並且爲字典中的每個鍵打印一個c變量的數字。改變你的循環,像這樣:

for key in Dict.keys(): 
    print("***Customer***") 
    print("Customer Number: " + Dict[key].getCNumber()) 

我相信getCNumber是方法,不是一個變量,所以你需要把它叫做 - 添加幾個大括號的方法名稱後,正如我上面顯示。
此外,堅持使用python命名約定並從小寫字母開始指定變量的名稱通常更好 - 因此您應該將Dict變量重命名爲dict
如果您需要遍歷你的字典的鍵在排定的順序,你可以寫for循環,像這樣:

for key in sorted(dict.keys()): 
+0

它不會按照他的要求命令,他需要使用OrderedDict –

+0

@KobiK在他的最後一條評論中讀到OP題。 – aga

+0

這就是爲什麼我寫評論,'1111第一,然後客戶2222第二'但我看到在你的編輯,你添加'排序()'所以+1爲:) –

1
for key in Map.keys(): 

以前您一直呼喚你的字典Dict。如果你發佈的是你實際運行的內容,那麼這是迭代完全不相關的字典。

print("Customer Number: " + c.getCNumber) 

您參考c在這裏,而不是關係到key什麼。 c仍然是您創建的最後一個客戶。如果Map包含兩個密鑰,這將打印c的信息兩次。 (實際上,由於缺少函數調用括號,因此可能會沿着<bound method object at...>的行打印某些內容。)

1

.keys不是必需的。

Python 2

In [127]: d = {'a': 1, 'b': 2} 

In [128]: for key in d: 
.....:  print(key) 
.....: 
a 
b 

Python 3

In [34]: d = {'a': 1, 'b': 2} 

In [35]: for key in d: 
....:  print(key) 
....: 
a 
b 

循環執行字典給key