То, что вы просите, называется «Перевернутый указатель» - отдельные элементы записываются только один раз со списком ключей.
>>> from collections import defaultdict
>>> a = {"2323232838": ("first/dir", "hello.txt"),
... "2323221383": ("second/dir", "foo.txt"),
... "3434221": ("first/dir", "hello.txt"),
... "32232334": ("first/dir", "hello.txt"),
... "324234324": ("third/dir", "dog.txt")}
>>> invert = defaultdict( list )
>>> for key, value in a.items():
... invert[value].append( key )
...
>>> invert
defaultdict(<type 'list'>, {('first/dir', 'hello.txt'): ['3434221', '2323232838', '32232334'], ('second/dir', 'foo.txt'): ['2323221383'], ('third/dir', 'dog.txt'): ['324234324']})
Инвертированный словарь имеет исходные значения, связанные со списком из 1 или более ключей.
Теперь, чтобы получить ваши пересмотренные словари из этого.
Фильтрация:
>>> [ invert[multi] for multi in invert if len(invert[multi]) > 1 ]
[['3434221', '2323232838', '32232334']]
>>> [ invert[uni] for uni in invert if len(invert[uni]) == 1 ]
[['2323221383'], ['324234324']]
Расширение
>>> [ (i,multi) for multi in invert if len(invert[multi]) > 1 for i in invert[multi] ]
[('3434221', ('first/dir', 'hello.txt')), ('2323232838', ('first/dir', 'hello.txt')), ('32232334', ('first/dir', 'hello.txt'))]
>>> dict( (i,multi) for multi in invert if len(invert[multi]) > 1 for i in invert[multi] )
{'3434221': ('first/dir', 'hello.txt'), '2323232838': ('first/dir', 'hello.txt'), '32232334': ('first/dir', 'hello.txt')}
Подобная (но более простая) обработка работает для предметов, которые встречаются один раз.