Python (2.4) 字典的排序
r_dict={'answer1': "value1",'answer11': "value11",'answer2': "value2",'answer3': "value3",'answer4': "value4",}
for i in r_dict:
if("answer" in i.lower()):
print i
Result is answer11,answer2,snswer4,answer3
我正在使用Python 2.4.3。有没有办法获取它被填充的顺序呢?
或者有没有办法通过正则表达式来实现这个,因为我在用的是较旧的Python版本?
4 个回答
1
光靠字典本身是不能做到的。在Python中,字典(还有一些类似的非专用数据结构)是没有排序的。
你可以尝试创建一个新的类,继承自 dict
,然后重写 __setitem__
和 __delitem__
这两个方法,把每个键添加到一个内部列表中,这样你就可以自己维护排序了。这样的话,你可能还需要重写其他方法,比如 __iter__
,以便在使用for循环时能得到你想要的排序。
...或者直接使用 odict模块,正如 @delnan建议的那样。
1
字典本身是没有顺序的。如果你想要一个有顺序的字典,可以使用 collections.OrderedDict
:
import collections
r_dict = collections.OrderedDict( [ ( 'answer1', "value1"), ('answer11', "value11"), ('answer2', "value2"), ('answer3', "value3"), ('answer4', "value4") ] )
for i in r_dict:
if("answer" in i.lower()):
print i
2
字典是无序的——这就是说,虽然它们有一些顺序,但这个顺序并不是很明显,它受到插入顺序和键的哈希值的影响。不过,还有一种实现方式可以记住插入的顺序,那就是 collections.OrderedDict。
补充:对于 Python 2.4,有几个第三方的实现。我没有使用过,但 voidspace 提供的那个看起来很不错。