Это расширяется после ответа Python перевернуть / инвертировать отображение , применяя, когда значения в dict не являются уникальными.
class ReversibleDict(dict):
def reversed(self):
"""
Return a reversed dict, with common values in the original dict
grouped into a list in the returned dict.
Example:
>>> d = ReversibleDict({'a': 3, 'c': 2, 'b': 2, 'e': 3, 'd': 1, 'f': 2})
>>> d.reversed()
{1: ['d'], 2: ['c', 'b', 'f'], 3: ['a', 'e']}
"""
revdict = {}
for k, v in self.iteritems():
revdict.setdefault(v, []).append(k)
return revdict
Реализация ограничена тем, что вы не можете использовать reversed
дважды и получить оригинал обратно. Это не симметрично как таковое. Протестировано с Python 2.6. Здесь - это пример использования того, как я использую для печати результирующий дикт.
Если вы предпочитаете использовать set
, а не list
, и существуют приложения, для которых это имеет смысл, вместо setdefault(v, []).append(k)
, используйте setdefault(v, set()).add(k)
.