简体   繁体   中英

How to extract values from list of dictionary that match the keys in another list

I have a list of keys: l_keys = ['a', 'c', 'd']

And I have a list of dictionary: l_dict = [{'a': 1, 'b': 2, 'c': 3}, {'a':4, 'd':5}]

The result I want to get is: [{'a': 1, 'c': 3}, {'a': 4, 'd': 5}]

.

I can achieve this result in the following way

[{k: d[key] for k in l_keys if k in l_dict} for d in l_dict]

.

Explain: I actually go through every object in l_dict and then I go through every key in l_keys and check if that key is in the current object and if so I retrieve it and its value

My question is if there is a better, professional and faster way in terms of time complexity to do that.

Firstly, your list comprehension should be: [{k: d[k] for k in l_keys if k in d} for d in l_dict]

If you know that len(l_keys) will usually be smaller than the dict s in l_dict , your way is the most efficient. Otherwise, it would be better to check whether each key in the dict is in l_keys : [{k: d[k] for k in d if k in l_keys} for d in l_dict] l_set = set(l_keys) : [{k: d[k] for k in d if k in l_set} for d in l_dict]

This page might be helpful when it comes to time complexity: https://wiki.python.org/moin/TimeComplexity#dict

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM