Search code examples
pythondictionarysetminimum

Remove the smallest element(s) from a dictionary


I have a function such that there is a dictionary as parameters, with the value associated to be an integer. I'm trying to remove the minimum element(s) and return a set of the remaining keys.

I am programming in python. I cant seem to remove key value pairs with the same key or values. My code does not work for the 2nd and 3rd example This is how it would work:

remaining({A: 1, B: 2, C: 2})
{B, C}

remaining({B: 2, C : 2})
{}
remaining({A: 1, B: 1, C: 1, D: 4})
{D}

This is what I have:

def remaining(d : {str:int}) -> {str}:
    Remaining = set(d)
    Remaining.remove(min(d, key=d.get))
    return Remaining

Solution

  • One approach is to take the minimum value, then build a list of keys that are equal to it and utilise dict.viewkeys() which has set-like behaviour and remove the keys matching the minimum value from it.

    d = {'A': 1, 'B': 1, 'C': 1, 'D': 4}
    
    # Use .values() and .keys() and .items() for Python 3.x
    min_val = min(d.itervalues())
    remaining = d.viewkeys() - (k for k, v in d.iteritems() if v == min_val)
    # set(['D'])
    

    On a side note, I find it odd that {B: 2, C : 2} should be {} as there's not actually anything greater for those to be the minimum as it were.