Search code examples
pythonfor-looplist-comprehensiondictionary-comprehension

Build Dictionary in Python Loop - List and Dictionary Comprehensions


I'm playing with some loops in python. I am quite familiar with using the "for" loop:

for x in y:
    do something

You can also create a simple list using a loop:

i = []
for x in y:
   i.append(x)

and then I recently discovered a nice efficient type of loop, here on Stack, to build a list (is there a name for this type of loop? I'd really like to know so I can search on it a little better):

[x.name for x in y]

Ok, that being said, I wanted to go further with the last type of loop and I tried to build a python dictionary using the same type of logic:

{x[row.SITE_NAME] = row.LOOKUP_TABLE for row in cursor}

instead of using:

x = {}
for row in cursor:
   x[row.SITE_NAME] = row.LOOKUP_TABLE

I get an error message on the equal sign telling me it's an invalid syntax. I believe in this case, it's basically telling me that equal sign is a conditional clause (==), not a declaration of a variable.

My second question is, can I build a python dictionary using this type of loop or am I way off base? If so, how would I structure it?


Solution

  • The short form is as follows (called dict comprehension, as analogy to the list comprehension, set comprehension etc.):

    x = { row.SITE_NAME : row.LOOKUP_TABLE for row in cursor }
    

    so in general given some _container with some kind of elements and a function _value which for a given element returns the value that you want to add to this key in the dictionary:

    { _key : _value(_key) for _key in _container }