Search code examples
pythoncollectionsdictionarypython-3.xordereddictionary

Accessing items in an collections.OrderedDict by index


Lets say I have the following code:

import collections
d = collections.OrderedDict()
d['foo'] = 'python'
d['bar'] = 'spam'

Is there a way I can access the items in a numbered manner, like:

d(0) #foo's Output
d(1) #bar's Output

Solution

  • If its an OrderedDict() you can easily access the elements by indexing by getting the tuples of (key,value) pairs as follows

    >>> import collections
    >>> d = collections.OrderedDict()
    >>> d['foo'] = 'python'
    >>> d['bar'] = 'spam'
    >>> d.items()
    [('foo', 'python'), ('bar', 'spam')]
    >>> d.items()[0]
    ('foo', 'python')
    >>> d.items()[1]
    ('bar', 'spam')
    

    Note for Python 3.X

    dict.items would return an iterable dict view object rather than a list. We need to wrap the call onto a list in order to make the indexing possible

    >>> items = list(d.items())
    >>> items
    [('foo', 'python'), ('bar', 'spam')]
    >>> items[0]
    ('foo', 'python')
    >>> items[1]
    ('bar', 'spam')