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});