Ordering in Python (2.4) dictionary

后端 未结 4 1525
情歌与酒
情歌与酒 2021-01-28 06:33
    r_dict={\'answer1\': \"value1\",\'answer11\': \"value11\",\'answer2\': \"value2\",\'answer3\': \"value3\",\'answer4\': \"value4\",}

    for i in r_dict:
        if(         


        
相关标签:
4条回答
  • 2021-01-28 07:08

    Short answer: no. Python dictionaries are fundamentally unordered.

    0 讨论(0)
  • 2021-01-28 07:10

    Not just by using the dictionary by itself. Dictionaries in Python (and a good portion of equivalent non-specialized data structures that involve mapping) are not sorted.

    You could potentially subclass dict and override the __setitem__ and __delitem__ methods to add/remove each key to an internal list where you maintain your own sorting. You'd probably then have to override other methods, such as __iter__ to get the sorting you want out of your for loop.

    ...or just use the odict module as @delnan suggested

    0 讨论(0)
  • 2021-01-28 07:15

    A dictionary is by construction unordered. If you want an ordered one, use a 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 讨论(0)
  • 2021-01-28 07:32

    Dictionaries are unordered - that is, they do have some order, but it's influenced in nonobvious ways by the order of insertion and the hash of the keys. However, there is another implementation that remembers the order of insertion, collections.OrderedDict.

    Edit: For Python 2.4, there are several third party implementations. I haven't used any, but since the one from voidspace looks promising.

    0 讨论(0)
提交回复
热议问题