Python function that takes value from a dict and return full dictionary for the value
I'm trying to write a function that takes a value for a given key (User_ID) and return the full dictionary for that value. I understand that this can probably be achieved without writing a function but as a beginner I'm trying to build my knowledge with functions.
My data is a list of dictionaries and looks like this:
[
{
"User_ID":"Z000",
"DOB":"01.01.1960",
"State":"Oregon",
"Bought":["P1","P2"]
},
{
"User_ID":"A999",
"DOB":"01.01.1980",
"State":"Texas",
"Bought":["P5","P9"]
}
]
I wrote the following function but I realized that this is would only work for a dictionary but I have a list of dictionaries. How can I make it to take the User_ID
value and return the full dictionary including the User_ID
, DOB
, State
and Bought
.
def find_user(val):
for key, value in dict_1.items():
if val == key:
return value
return "user not found"
You want to iterate over the list and compare the UserID
of a dictionary with an input UserID:
def find_user(val, lsts):
for d in lsts:
if val == d['User_ID']:
return d
return "user not found"
Then
print(find_user('Z000', lsts))
prints
{'User_ID': 'Z000',
'DOB': '01.01.1960',
'State': 'Oregon',
'Bought': ['P1', 'P2']}
and
print(find_user('000', lsts))
prints
user not found
If however, your data is like:
d = { "Data": [{"User_ID":"Z000"},{"User_ID":"A999"} ]}
Then you can pass the list inside the dictionary to the function like:
find_user('Z000', d['Data'])
which returns
{'User_ID': 'Z000'}
If you really want to write a function for this task, your design is on the right track, but needs to be modified to account for the fact that you have a list of dictionaries. Something like this might work:
def find_user(userid):
for user_dict in big_list_of_user_dictionaries:
if user_dict['User_ID'] == userid:
return user_dict
However, you might be better off creating a new dictionary, where each key is the userid, and each value is one of your user info dictionaries. You could use Python's dictionary comprehensions to make such a dictionary quickly:
user_dict = {d['User_ID'] : d for d in big_list_of_user_dictionaries}
Then you could find the user info dictionary for any user by looking up their id in the user_dict
, like this:
print(user_dict['Z000'])
Hope this code works for you.
def find_user(val):
for dict_key in l:
if dict_key["User_ID"] == val:
return dict_key
else:
return "User Not Found"
print(find_user("Z000"))
here l is the list that stores all your dictionaries.