Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 975
Mike Avatar asked Oct 01 '13 16:10

Mike


People also ask

Can you create a dictionary with list comprehension?

We can add a filter to the iterable to a list comprehension to create a dictionary only for particular data based on condition. Filtering means adding values to dictionary-based on conditions.

What are dict comprehensions in Python?

Dictionary comprehension is a method for transforming one dictionary into another dictionary. During this transformation, items within the original dictionary can be conditionally included in the new dictionary and each item can be transformed as needed.

What is difference between list comprehension and dictionary comprehension?

Its syntax is the same as List Comprehension. It returns a generator object. A dict comprehension, in contrast, to list and set comprehensions, needs two expressions separated with a colon. The expression can also be tuple in List comprehension and Set comprehension.

What is the benefit of dict and list comprehensions?

Not only do list and dictionary comprehensions make code more concise and easier to read, they are also faster than traditional for-loops.


Video Answer


2 Answers

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 } 
like image 155
lejlot Avatar answered Oct 07 '22 15:10

lejlot


What you're using is called a list comprehension. They're pretty awesome ;)

They have a cousin called a generator expression that works like a list comprehension but instead of building the list all at once, they generate one item at a time. Hence the name generator. You can even build functions that are generators - there are plenty of questions and sites to cover that info, though.

You can do one of two things:

x = dict(((row.SITE_NAME, row.LOOKUP_TABLE) for row in cursor)) 

Or, if you have a sufficiently new version of Python, there is something called a dictionary comprehension - which works like a list comprehension, but produces a dictionary instead.

x = {row.SITE_NAME : row.LOOKUP_TABLE for row in cursor} 
like image 27
Wayne Werner Avatar answered Oct 07 '22 16:10

Wayne Werner