任何人都可以告诉我如何获取我的代码以生成下面所需的输出。干杯
def dict_invert(d):
inv = {}
for k, v in d.iteritems():
keys = inv.setdefault(v, [])
keys.append(k)
return inv
我的输入1:>>> dict_invert({30000: 30, 600: 30, 2: 10})
我的输出1:>>> {10: [2], 30: [30000, 600]}
>>> {10: [2], 30: [600, 30000]}
我的输入2:>>> dict_invert({0: 9, 9: 9, 5: 9})
我的输出2:>>> {9: [0, 9, 5]}
所需的输出2:>>> {9: [0, 5, 9]}
答案 0 :(得分:2)
您可以使用collections.defaultdict
按输入字典的值将输入字典的键分组到列表中:
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]}
如果您想要订购钥匙,请查看collections.OrderedDict
。
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])])
答案 1 :(得分:0)
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});