2016-05-23 15 views
2

辞書を反復処理するとき、それは任意の順序であると理解します。しかし、特定のアイテムが最後にアクセスされていることを確認する必要があります。このアイテムは、キーが最も小さいものです。これをどのように実装すればよいですか?辞書を逆順に反復する(Python)

は今のところ、私は辞書順 "A"、 "H"、 "N" で繰り返すことを起こる

files["h"] = DIRECTORY["h"][0] 
files["n"] = DIRECTORY["n"][0] 
files["a"] = DIRECTORY["a"][0] 

for key, file_dir in files.iteritems(): 
    print ("Checking {0} in {1}".format(key, file_dir)) 
    # process files 

を持っています。私は "h"と "n"のファイルに依存しているので、 "a"を最後に処理する必要があります。

process filesコードを2回実行する必要はありません.1回は "h"と "n"、もう1回は "a"ですか?

+0

任意は「あなたのコントロール外」を意味します。あなたは辞書に最初から最後まで何かを与えることはできません。そうでなければ、アイテムをどのような順序で並べ替えるかを制御することはできません。最後にそれをしたい場合は、アイテムをソートし、ソートされたリストを反復処理します。 – BrenBarn

答えて

5

リストを反復する前に並べ替えてください。

の場合、iteritems()は削除されています。

files = {"d":2, "g":1, "a":3, "b":3, "t":2} 
print(files.items()) 
for key, file_dir in sorted(list(files.items()), key=lambda x:x[0].lower(), reverse=True): 
    print ("Checking {0} in {1}".format(key, file_dir)) 
+0

奇妙な。私がこれを使うと、 "h"、 "a"、 "n"の順番になります。確かに – Rayne

+0

。奇妙な....私はそれを実行し、nhaを得た。私は上記の例でそれをもう一度実行し、それは動作します...あなたに何を伝えるべきかわからない。 =( – mattsap

2

任意は「あなたのコントロール外」を意味します。あなたは辞書に最初から最後まで何かを与えることはできません。そうでなければ、アイテムをどのような順序で並べ替えるかを制御することはできません。最後にそれをしたい場合は、アイテムをソートし、ソートされたリストを反復処理します。そのアイテムがユニークで、別の方法で処理したい場合は、そのアイテムを辞書からポップし、最後に個別に処理します。

1

それは実際のコードだ場合、私はそれはのような単純なものかもしれないあなたが実際に最後にしたいキーがaであるあなたが与えているコードは、擬似コードであるかどうか教えてくれますが、できません。

files["h"] = DIRECTORY["h"][0] 
files["n"] = DIRECTORY["n"][0] 
files["a"] = DIRECTORY["a"][0] 

for key, file_dir in sorted(files.iteritems(), key=lambda x: 1 if x[0] == 'a' else 0): 
    print ("Checking {0} in {1}".format(key, file_dir)) 
    # process files 
関連する問題