Finglish
Finglish

Reputation: 9956

How to remove dictionaries with duplicate values from a nested dictionary

I have a dictionary that contains key value pairs where the values are also dictionaries:

{ 
    'item1':{'name':'filename', 'size':1024},
    'item2':{'name':'filename', 'size':1024},
    'item3':{'name':'diff_filename', 'size':1024},
    'item4':{'name':'diff_filename', 'size':1024}
}

I want to remove items in the dictionary that have duplicate 'filename' fields in their values giving me the result:

{ 
    'item1':{'name':'filename', 'size':1024},
    'item3':{'name':'diff_filename', 'size':1024}
}

Upvotes: 0

Views: 132

Answers (1)

Martijn Pieters
Martijn Pieters

Reputation: 1122152

Use an auxiliary set to track what filenames you have seen already:

seen = set()
{k: v for k, v in yourdict.iteritems() 
    if v['name'] not in seen and (seen.add(v['name']) or True)}

Or, more readable as a loop:

seen = set()
filtered = dict()
for k, v in yourdict.iteritems():
    if v['name'] in seen:
        continue
    seen.add(v['name'])
    filtered[k] = v

Upvotes: 4

Related Questions