python中字典更智能"反向"(某些值是相同的)?

mrk*_*afk 5 python dictionary

def revert_dict(d):
    rd = {}
    for key in d:
        val = d[key]
        if val in rd:
            rd[val].append(key)
        else:
            rd[val] = [key]
    return rd

>>> revert_dict({'srvc3': '1', 'srvc2': '1', 'srvc1': '2'}) 
{'1': ['srvc3', 'srvc2'], '2': ['srvc1']}
Run Code Online (Sandbox Code Playgroud)

这显然不是简单地用键交换键:这会覆盖一些值(作为新键),这不是我所追求的.

如果不同键的2个或更多值相同,则应将键分组到列表中.

以上功能有效,但我想知道是否有更聪明/更快的方式?

Joh*_*ica 8

看起来很不错.您可以使用以下方法简化它defaultdict:

import collections

def revert_dict(d):
    rd = collections.defaultdict(list)

    for key, value in d.iteritems():
        rd[value].append(key)

    return rd
Run Code Online (Sandbox Code Playgroud)