Python 从原始字典中反转键和值并排序

Python 从原始字典中反转键和值并排序,python,dictionary,key,invert,Python,Dictionary,Key,Invert,谁能告诉我如何让我的代码生成下面所需的输出。干杯 def dict_invert(d): inv = {} for k, v in d.iteritems(): keys = inv.setdefault(v, []) keys.append(k) return inv 我的输入1:dict_invert({30000:30600:30,2:10}) 我的输出1:>{10:[2],30:[30000600]} 所需输出1>>{10:[2

谁能告诉我如何让我的代码生成下面所需的输出。干杯

def dict_invert(d):
    inv = {}
    for k, v in d.iteritems():
        keys = inv.setdefault(v, [])
        keys.append(k)
    return inv

我的输入1:dict_invert({30000:30600:30,2:10})

我的输出1:
>{10:[2],30:[30000600]}

所需输出1
>>{10:[2],30:[60030000]}
我的输入2:dict_invert({0:9,9:9,5:9})

我的输出2:
>{9:[0,9,5]}

所需输出2:
>{9:[0,5,9]}
您可以使用将输入字典的键按输入字典的值分组到列表中:

from collections import defaultdict

def dict_invert(d):
    dd = defaultdict(list)
    for k in d:
        dd[d[k]].append(k)
    return {k:sorted(dd[k]) for k in dd} 

>>> dict_invert({30000: 30, 600: 30, 2: 10})
{10: [2], 30: [600, 30000]}
>>> dict_invert({0: 9, 9: 9, 5: 9})
{9: [0, 5, 9]}
因此,对于这些示例,这将生成您想要的输出。不清楚您是否还希望结果字典按键排序。在上面的示例中,键看起来是按顺序排列的,但实际上并非如此,因为字典没有固有的顺序

>>> dict_invert({30000: 30, 600: 30, 2: 10, 1234: -1})
{10: [2], 30: [600, 30000], -1: [1234]}
如果您想订购钥匙,请查看


请告诉我们您尝试了什么?您的问题被标记为
javascript
?或者将
dd[d[k]]替换为
bisect.insort(dd[d[k]],k)
,并删除对
sorted
@Bakuriu的调用:是的,我曾短暂考虑过这一点,但认为可能会混淆。而且我也懒得去查:)
def dict_invert(d):
    dd = defaultdict(list)
    for k in d:
        dd[d[k]].append(k)
    return OrderedDict(sorted((k, sorted(dd[k])) for k in dd))

>>> dict_invert({30000: 30, 600: 30, 2: 10, 1234: -1})
OrderedDict([(-1, [1234]), (10, [2]), (30, [600, 30000])])
 function dict_invert(obj){

        var objArr = {};
        for(var key in obj){
            if(!objArr[obj[key]]){
                objArr[obj[key]] = [];

            }
            objArr[obj[key]].push(key);        
        }

        return objArr;

    }
    var objArr = dict_invert({30000: 30, 600: 30, 2: 10});