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':なし...など)と表示されるようにコードを正しく記述する方法を知っている人はいますか?そしてうまくいけば、誰かが私のコードが私が意図したように機能しなかった理由を説明することができます。

4

1 に答える 1

10

標準のPython辞書は本質的に順序付けられていません。

1つの可能性はを使用することOrderedDictです。挿入順序は保持されます。つまり、エントリを取得する順序で挿入する必要があります。

もう1つの可能性は、そのままにしておくことdictですが、目的の順序で繰り返します。

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

最後に、この例では部屋番号が整数ではなく文字列として格納されていることに注意してください。これは、順序が辞書式('90' > '100')であることを意味します。これは宿題なので、これを修正する方法を理解するための読書の練習として残しておきます。

于 2012-05-16T16:21:27.317 に答える