In its current implementation, the list type does not provide a simple and 
straightforward way to retrieve one of its elements that fits a certain 
criteria.

If you had to get the user where user['id'] == 2 from this list of users, for 
example, how would you do it?

users = [
    {'id': 1,'name': 'john'},
    {'id': 2, 'name': 'anna'},
    {'id': 3, 'name': 'bruce'},
]

# way too verbose and not pythonic
ids = [user['id'] for user in users]
index = ids.index(2)
user_2 = users[index]

# short, but it feels a bit janky
user_2 = next((user for user in users if user['id'] == 2), None)

# this is okay-ish, i guess
users_dict = {user['id']: user for user in users}
user_2 = users_dict.get(2)


In my opinion, the list type could have something along these lines:

class MyList(list):
    def find(self, func, default=None):
        for i in self:
            if func(i):
                return i
        return default

my_list = MyList(users)
user_2 = my_list.find(lambda user: user['id'] == 2)
print(user_2)  # {'id': 2, 'name': 'anna'}
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/3ZOLBF3TWGLIHO6LRS57I4OO5UISFGMO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to