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版本?
答案 0 :(得分:2)
字典是无序的 - 也就是说,它们确实有一些顺序,但是它的插入顺序和键的散列以非显而易见的方式受到影响。但是,还有另一个实现可以记住插入顺序collections.OrderedDict。
编辑:对于Python 2.4,有几个第三方实现。我没有使用任何,但因为the one from voidspace看起来很有希望。
答案 1 :(得分:1)
不仅仅是单独使用字典。 Python中的字典(以及涉及映射的等效非专用数据结构的很大一部分)未排序。
您可以潜在地dict
子类并覆盖__setitem__
和__delitem__
方法,以将每个键添加/删除到您维护自己排序的内部列表。然后,您可能必须覆盖其他方法,例如__iter__
,以便从for循环中获取所需的排序。
...或者只使用odict module作为@delnan suggested
答案 2 :(得分: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
答案 3 :(得分:0)
简答:不。 Python字典从根本上讲是无序的。