0

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}
}
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
Finglish
  • 9,692
  • 14
  • 70
  • 114

1 Answers1

4

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
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343