0

我有一本字典:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}

当我尝试打印它的值时,它们是从右到左打印的:

>>> for item in a.values():
    print item,


edc qaz wer

我希望它们从左到右打印:

wer qaz edc

我该怎么做?

4

5 回答 5

9

你不能。字典没有您可以使用的任何顺序,因此对于字典文字没有“从左到右”的概念。决定排序,并坚持下去。

于 2012-05-20T16:25:22.360 回答
4

您可以使用collections.OrderedDict(python 2.7 或更高版本——某处有一个 ActiveState 配方为 python 2.4 或更高版本(我认为)提供此功能)来存储您的项目。当然,您需要以正确的顺序将项目插入字典({}语法将不再有效 - 也不会将 key=value 传递给构造函数,因为正如其他人所提到的,那些依赖于具有没有顺序的概念)

于 2012-05-20T16:49:44.847 回答
3

假设您希望它们按字母顺序排列,您可以执行以下操作:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}  # your dictionary

keylist = a.keys()   # list of keys, in this case ["w3", "w2", "w1"]
keylist.sort()       # sort alphabetically in place, 
                     #  changing keylist to ["w1", "w2", w3"]

for key in keylist:
    print a[key]     # access dictionary in order of sorted keys
于 2012-05-20T16:36:22.467 回答
0

正如@IgnacioVazquez-Abrams 提到的,这不是字典中的东西,但是您可以通过使用来自http://pypi.python.org/pypi/odictorder的有序字典来实现类似的效果odict

还可以查看PEP372以获取更多讨论和 odict 补丁。

于 2012-05-20T16:36:31.867 回答
0

字典使用哈希值来关联值。对字典进行排序的唯一方法如下所示:

dict = {}
x = [x for x in dict]
# sort here
y = []
for z in x: y.append(dict[z])

我有一段时间没有在 python 中做过任何真正的工作,所以我可能有点生疏。如果我错了,请纠正我。

于 2012-05-20T19:05:36.150 回答