Drop Keys From Dictionary - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Drop Keys From Dictionary (/thread-27231.html) Drop Keys From Dictionary - donnertrud - May-30-2020 Hi guys, I got a dictionary with values ranging from 0.25 to -0.25. I am looking for a way, to automatically drop all keys that are either 0 < value < 0.1 or 0 > value > -0.1 so basically all keys' values between 0.1 and -0.1 should be dropped from the dict. Is there an easy way to do that? RE: Drop Keys From Dictionary - Knight18 - May-30-2020 You could iterate over the dictionary, checking each key value and if your conditions are met append that value to a new dictionary. I don't think you can just drop key values from an existing dictionary. RE: Drop Keys From Dictionary - donnertrud - May-30-2020 That would work aswell! Can you recall a code to do that ? RE: Drop Keys From Dictionary - DreamingInsanity - May-30-2020 There's probably many ways of doing this, but personally I would use the filter() method: ages = {"0.25": "a", "0.1":"b", "-0.03": "c", "-0.25": "d"} def myFunc(x): if (not -0.1 <= float(x) <= 0.1): return x ages = { k:ages[str(k)] for k in filter(myFunc, ages) }Ages would then become: {'0.25': 'a', '-0.25': 'd'} This could be compressed into 1 line if you wanted: ages = { k:ages[str(k)] for k in filter(lambda x: not -0.1 <= float(x) <= 0.1, ages) }EDIT: I read your post wrong. I didn't realise the floats were the the values and not the keys. Instead you can do this: ages = {"1": "0.25", "2": "0.1", "3": "-0.03", "4": "-0.25"} ages = { k:ages[str(k)] for k in filter(lambda x: not -0.1 <= float(ages[x]) <= 0.1, ages) } print(ages)which gets you: Output:{'1': '0.25', '4': '-0.25'} RE: Drop Keys From Dictionary - WiPi - May-30-2020 Here's another straightforward method dictOfVals = {1: 0.2, 2: -0.1, 3: 2, 4: 0.1, 5: 0.05} newDict=dict() # Iterate over all the dict values for value in dictOfVals.values(): if value > 0.1 or value < -0.1: print(value) RE: Drop Keys From Dictionary - donnertrud - May-30-2020 (May-30-2020, 09:55 AM)WiPi Wrote: Here's another straightforward method dictOfVals = {1: 0.2, 2: -0.1, 3: 2, 4: 0.1, 5: 0.05} newDict=dict() # Iterate over all the dict values for value in dictOfVals.values(): if value > 0.1 or value < -0.1: print(value) How would I also get the corresponding key for each value? RE: Drop Keys From Dictionary - Yoriz - May-30-2020 A dictionary has a pop method: https://docs.python.org/3/library/stdtypes.html?highlight=dict%20pop#dict.pop Wrote:pop(key[, default]) If key is in the dictionary, remove it and return its value, else return default. If default is not given and key is not in the dictionary, a KeyError is raised. RE: Drop Keys From Dictionary - donnertrud - May-30-2020 Thanks, with your help I made it work! Now, is there a convenient way to select these keys in a data frame ? E.g. if the dict gave me the keys : "a" , "b" and "e", I want to select them from the the data frame where they are initially coming from : df = df.columns["a", "b", "e"]I could do it manually, however I got too many returned keys and I am asking out of curiosity. RE: Drop Keys From Dictionary - DeaD_EyE - May-30-2020 Try following with pandas: df = pd.DataFrame(columns=list("abcdefgh")) df[["a", "b", "c"]]In the previous question you asked how to get also the keys. If you want to get also the keys, why not return two dicts? One dict could hold all ok_values and the other can contain the not_ok_values. def classify(mapping): """ Return two dicts from mapping. The first dict contains the `ok values` and the second dict contains the `not ok values` """ ok_mapping = {} nok_mapping = {} for key, value in mapping.items(): if 0 < value < 0.1: ok_mapping[key] = value else: nok_mapping[key] = value return ok_mapping, nok_mapping dictOfVals = {1: 0.2, 2: -0.1, 3: 2, 4: 0.1, 5: 0.05} print(classify(dictOfVals))Output:({5: 0.05}, {1: 0.2, 2: -0.1, 3: 2, 4: 0.1})