2012-05-16 236 views
5

問題是房間號碼和客人詳細信息的列表我直接從txt文件中翻譯,需要將其放入字典中,房間號碼作爲鍵和細節作爲值。如何對字典進行排序?

客人名單實際上是一個列表,每個項目代表房間號碼,客人姓名,到達,出發日期。旁邊沒有任何東西的房間都是空的。

nlist = [['101'], ['102'], ['103'], 
['201', ' John Cleese', ' 5/5/12', ' 5/7/12'], ['202'], 
['203', ' Eric Idle', ' 7/5/12', ' 8/7/12'], ['301'], ['302'], ['303']] 

基本上,要把它變成字典。下面是我的嘗試:

guests = {} 
for i in nlist: 
     if len(i) == 1: 
      key = i[0] 
      guests[key] = None 
     else: 
      key = i[0] 
      val = i[1],i[2],i[3] 
      guests[key] = val 

這給了我:

guests = {'201': (' John Cleese', ' 5/5/12', ' 5/7/12'), 
'203': (' Eric Idle', ' 7/5/12', ' 8/7/12'), '202': None, '301': None, 
'302': None, '303': None, '102': None, '103': None, '101': None} 

正如你所看到的字典放在一起沒有特定的順序。然而,對於這個特定的練習,字典需要按從低到高的順序排列。我想我認爲它只是從頭到尾循環遍歷每個內部列表,測試它,然後按照該順序構建字典。

是否有人知道如何正確編寫代碼,使字典出現{101':無,'102',無,'103':無......等等)?希望有人能解釋爲什麼我的代碼不能按我的意圖工作。

+3

詞典條目存儲爲散列,本質上是無序的。你的作業是否需要你使用字典?你爲什麼需要他們訂購? –

+0

[Python項目中排序的項目]的可能的重複(http://stackoverflow.com/questions/3127945/items-ordering-in-python-dictionary) – geoffspear

+1

對不起,我的標題有點誤導,不是嗎?我更加感興趣的是爲什麼字典以這種特殊方式混亂。我從所有答案中得到的結論是'它只是'大聲笑是的,它確實需要一本字典,但是如果我使用aix的代碼低於 – bang

回答

10

標準Python字典本質上是無序的。

一種可能性是使用OrderedDict。它將保留插入順序,這意味着您必須按照您希望檢索它們的順序插入條目。

另一種可能性是保持dict原樣,但在迭代所需的順序:

for k, v in sorted(guests.items()): 
    print k, v 

最後,應該指出的是,你的榜樣店的房間號碼爲字符串,而不是整數。這意味着訂購是詞典('90' > '100')。由於這是作業,我把它作爲閱讀練習來弄清楚如何解決這個問題。

+1

很好的編輯。這是可能的(因爲這是家庭作業),OP只能使用某些數據類型。 –

+0

重要的是要指出,OrderedDict的排序是基於插入順序,而不是按鍵(房間號),所以根據輸入的文本文件,它可能不合適。 – hexparrot

+0

請注意,房間號碼實際上是字符串,並且是字典式的。如果較小的數字被寫爲「5'5」而不是「005」,它將不起作用。如果情況確實如此,則可以選擇將其轉換爲整數。 – pepr

相關問題