2016-05-23 2 views
2

Я понимаю, что при итерации через словарь он будет в произвольном порядке. Тем не менее, мне нужно убедиться, что к одному конкретному элементу обращается последний, и этот элемент имеет самый маленький ключ. Как мне это реализовать?Итерации через словарь в обратном порядке (Python)

Прямо сейчас, у меня есть

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 

Словарь происходит с итерироваться в порядке «а», «з», «л». Мне нужно обработать «a» последним, потому что это зависит от файлов в «h» и «n».

Есть ли способ сделать это без запуска кода process files дважды, один раз для «h» и «n», другой для «a»?

+0

Произвольные средства «вне вашего контроля». Вы не можете заставить словарь дать вам что-либо в первую очередь или последним или каким-либо иным образом контролировать, в каком порядке он дает вам элементы. Если вы хотите, чтобы это было последним, сортируйте элементы и затем перебирайте отсортированный список. – BrenBarn

ответ

5

Просто отсортируйте список перед повторением на них.

for key, file_dir in sorted(files.iteritems(), key=lambda x:x[0].lower, reverse=True): 
    print ("Checking {0} in {1}".format(key, file_dir)) 

Для python 3, так как 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

действительно. Странно ... Я просто побежал и получил нха. Я снова запустил его с приведенным выше примером, и он работает ... не уверен, что вам сказать. знак равно – 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 
Смежные вопросы