Home > Enterprise >  Subseting dictionaries in Python
Subseting dictionaries in Python

Time:09-08

I would like to get d3 from d2 and d1. That said, I would lke the keys that d1 and d2 have in common and take the 0th element of criterion and the 1st element of other, as opposed to the index itself. The result d3 should contain any left over keys that were not in d1 as well as the selected values. Thank you.

d1 = {'criterion': 0, 'other':1, 'n_estimators': 240}

d2 = {'criterion': ["gini", "entropy", "log_loss"], 'other': ["sqrt", "log2"]}

d3 = {'criterion': "gini", 'other':"entropy", 'n_estimators': 240}

CodePudding user response:

Just loop over d1, getting values from d2 where available, and keeping the d1 value otherwise:

d3 = {}
for k, v in d1.items():
    if k in d2:
        d3[k] = d2[k][v]
    else:
        d3[k] = v

A perhaps overly concise version of this can be written as a dictcomp:

d3 = {k: d2[k][v] if k in d2 else v for k, v in d1.items()}

CodePudding user response:

I'm guessing at what you actually want here, and am providing a suggestion for better design. d2 is a dictionary that maps a category number to a string, I think. So let's give it a more descriptive name. I assume you will do this for many dicts, so you should make a function to do so.


def dictmaker(d_in):
    category_dict = {'criterion': ["gini", "entropy", "log_loss"], 'other': ["sqrt", "log2"]}
    d_new = {}
    for k, v in d_in.items():  # iter thru input dict
        if k in category_dict:  # if key is a category-type key
            v = category_dict[k][v]  # get the category string and set to value
        d_new[k] = v
    return d_new
    
print(dictmaker({'criterion': 0, 'other':1, 'n_estimators': 240}))

  • Related