Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: get a dict from a list based on something inside the dict

I need to be able to find an item in a list (an item in this case being a dict) based on some value inside that dict. The structure of the list I need to process looks like this:

[     {         'title': 'some value',         'value': 123.4,         'id': 'an id'     },     {         'title': 'another title',         'value': 567.8,         'id': 'another id'     },     {         'title': 'last title',         'value': 901.2,         'id': 'yet another id'     } ] 

Caveats: title and value can be any value (and the same), id would be unique.

I need to be able to get a dict from this list based on a unique id. I know this can be done through the use of loops, but this seems cumbersome, and I have a feeling that there's an obvious method of doing this that I'm not seeing thanks to brain melt.

like image 934
johneth Avatar asked Aug 16 '11 13:08

johneth


People also ask

How do I access a list in dictionary?

keys() is a method which allows to access keys of a dictionary. .get(key) is method by how we can access every key one by one. Then by using nested loop we can access every key and its values one by one remained in a list. Welcome to Stack Overflow. Code dumps without any explanation are rarely helpful.

How do I get a dict key from a list?

To convert Python Dictionary keys to List, you can use dict. keys() method which returns a dict_keys object. This object can be iterated, and if you pass it to list() constructor, it returns a list object with dictionary keys as elements.

Can a list contains a dictionary?

A dictionary can contain another dictionary. A dictionary can also contain a list, and vice versa.


1 Answers

my_item = next((item for item in my_list if item['id'] == my_unique_id), None) 

This iterates through the list until it finds the first item matching my_unique_id, then stops. It doesn't store any intermediate lists in memory (by using a generator expression) or require an explicit loop. It sets my_item to None of no object is found. It's approximately the same as

for item in my_list:     if item['id'] == my_unique_id:         my_item = item         break else:     my_item = None 

else clauses on for loops are used when the loop is not ended by a break statement.

like image 88
agf Avatar answered Sep 20 '22 10:09

agf