以相反顺序迭代字典(Python)

时间:2016-05-23 02:56:19

标签: python dictionary

据我所知,在迭代字典时,它将按任意顺序排列。但是,我需要确保最后访问一个特定项目,并且此项目恰好具有最小的键。我该如何实现呢?

现在,我有

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”的顺序迭代。我需要最后处理“a”,因为它依赖于“h”和“n”中的文件。

有没有办法在不运行process files代码两次的情况下执行此操作,一次用于“h”和“n”,另一种用于“a”?

3 个答案:

答案 0 :(得分:6)

在迭代之前对列表进行排序。

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))

答案 1 :(得分:2)

任意意味着“在你的控制之外”。你不能让字典首先或最后给你任何东西或以其他方式控制它给你的项目的顺序。如果你想要最后一个,排序项目,然后迭代排序列表。或者,如果那个项目是唯一的并且您想要以不同的方式处理它,请从字典中弹出一个并在最后单独处理它。

答案 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