Reputation: 9956
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
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