'Access keys and vals in listed python-dict

I've got a list k with the 0'th element:

k[0]: {'pattern': 0, 'pos': array([   9.83698,  106.539  ,  130.314  ]), 'id': 1922}

(It looks like a dict, but its a list indeed) when I iterate through the 0'th element of the list k and print out each element I Get:

for i in k:
    print i

=>output:

pattern
pos
id

I'd like to access not only the keys but the values as well. How to do this? I've also tried to convert the list back into a dict using zip and izip, but same resutlts...i.e. only keys are printed, no values... any help will be appreciated

thx in advance



Solution 1:[1]

you can use k.values() to iterate through the values, or k.items() to iterate through (key, value) pairs

for value in k.values():
     print value

for key, value in k.items():
     print key, value

Solution 2:[2]

The fastest way to iterate over the dictionary you created (it is in fact a dictionary) is not to create the lists of keys/values using k[0].keys(), k[0].values and k[0].items() but using k[0].iteritems() which creates a dictionary iterator that returns just the pairs without allocating lists in the memory.

It also runs much faster for big dictionaries (a being the dictionary):

>>> non_iter_timer = timeit.Timer("for k,v in a.items(): k + v", setup="a = {x:x for x in xrange(10000000)}")
>>> non_iter_timer.repeat(3, 10)
[25.612606023166585, 25.100741935717622, 24.840450306339463]

>>> iter_timer = timeit.Timer("for k,v in a.iteritems(): k + v", setup="a = {x:x for x in xrange(10000000)}")
>>> iter_timer.repeat(3, 10)
[9.26259596885518, 9.198298194571748, 9.77466250122282]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 blakejgriffin
Solution 2 sheba