Here’s a sample of the data:
[{ 'name': 'Age', 'p_value': '<0.001', 'ks_score': '0.07', }, { 'name': 'peer_LM_Mean_SelfAware', 'p_value': '<0.001', 'ks_score': '0.06', }]
I have over 16k dictionaries with several items in the list. What I want to do is replace the value of name
in this dictionary from another dictionary which consists of the old name and new name.
col_rename_list = {'Male': 'Male, n (%)', 'Age': 'Age, years', 'Baby_Boomers__1946_1964_': 'Baby Boomers (1946-1964), n (%)', 'Generation_X__1965_1980_': 'Generation X (1965-1980), n (%)', 'Generation_Y___Millennials__1981_1996_': 'Generation Y/Millennials (1981-1996), n (%)', 'Race_Asian': 'Asian, n (%)', 'peer_LM_Mean_SelfAware': 'Self-Awareness' }
How can I do this? One way that I could think of is the following:
for d in dictionary_list: for k,v in d.items(): if k == 'name': if col_rename_list.get(v) is not None: d[k] = col_rename_list.get(v)
This works, but is there a better and efficient way to do this?
Advertisement
Answer
You can use dict.get
with with default parameter:
lst = [ { "name": "Age", "p_value": "<0.001", "ks_score": "0.07", }, { "name": "peer_LM_Mean_SelfAware", "p_value": "<0.001", "ks_score": "0.06", }, ] col_rename_list = { "Male": "Male, n (%)", "Age": "Age, years", "Baby_Boomers__1946_1964_": "Baby Boomers (1946-1964), n (%)", "Generation_X__1965_1980_": "Generation X (1965-1980), n (%)", "Generation_Y___Millennials__1981_1996_": "Generation Y/Millennials (1981-1996), n (%)", "Race_Asian": "Asian, n (%)", "peer_LM_Mean_SelfAware": "Self-Awareness", } for d in lst: d["name"] = col_rename_list.get(d["name"], d["name"]) # pretty print: from pprint import pprint pprint(lst)
Prints:
[{'ks_score': '0.07', 'name': 'Age, years', 'p_value': '<0.001'}, {'ks_score': '0.06', 'name': 'Self-Awareness', 'p_value': '<0.001'}]