2010-08-12 89 views
0
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中排序(2.4)字典

或者有没有办法通过正则表达式来做到这一点,因为我使用的是较老的Python版本?

+0

什么是“”答案##“'? – katrielalex 2010-08-12 16:06:31

+0

请参阅编辑。 – Hulk 2010-08-12 16:07:04

+0

也许编辑问题的标题,以表明你是在Python 2.4.x或指出collections.OrderedDict不是一个选项。 – whaley 2010-08-12 16:18:13

回答

2

字典是无序的 - 也就是说,他们确实有一些订单,但它通过插入的顺序和按键的哈希不明显的方式影响。但是,还有另一种实现可以记住插入的顺序,collections.OrderedDict

编辑:对于Python 2.4,有几个第三方实现。我没有使用任何,但因为the one from voidspace看起来很有前途。

+0

他在python 2.4.3上。 OrderedDict从2.7开始是新的。 – whaley 2010-08-12 16:15:03

+0

是的,已经看到了,并添加了2.4解决方案。 – delnan 2010-08-12 16:19:18

+0

+1空隙的实现。我以前没有意识到这一点。 – whaley 2010-08-12 16:28:17

1

不只是单独使用字典。 Python中的字典(以及涉及映射的等效非特定数据结构的很大一部分)未被排序。

您可能潜在子类dict并覆盖__setitem____delitem__方法来添加/删除每个键到内部列表,您维护自己的排序。您可能必须重写其他方法,例如__iter__以从您的for循环中获得想要的排序。

...或者只是使用odict module作为@delnan suggested

0

简短的回答:没有。 Python字典基本上是无序的。

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 
+0

我正在使用python 2.4.3我认为这可能不可行 – Hulk 2010-08-12 16:12:49

+0

'集合'是在Python 2.4中引入的,我相信。你试过了吗? – katrielalex 2010-08-12 16:15:52

+0

啊,道歉。 “集合”确实是在Python 2.4中引入的,但是“OrderedDict”直到2.7才被添加。如果你需要这个功能,可能最容易做一个[(key,value)]元组列表并且自己处理唯一性。 – katrielalex 2010-08-12 16:17:14