Python:根据字典中的值对递增的数字进行排序

Python:根据字典中的值对递增的数字进行排序,python,dictionary,Python,Dictionary,我刚开始工作,但意识到我少了一块。我试图在字典中得到重复的值,根据重复的数量增加数字,使其中一个保持不变,但所有的顺序实际上是沿着道路的距离 从这样的词典开始: Deca_dict = { "1": "2_506", "2": "2_506", "3": "2_506", "4": "2_600", "5": "1_650", "6": "2_600" } Deca_dict -> { "1": "3_506", "2":

我刚开始工作,但意识到我少了一块。我试图在字典中得到重复的值,根据重复的数量增加数字,使其中一个保持不变,但所有的顺序实际上是沿着道路的距离

从这样的词典开始:

Deca_dict = {
    "1": "2_506",
    "2": "2_506",
    "3": "2_506",
    "4": "2_600",
    "5": "1_650",
    "6": "2_600"
}
Deca_dict -> {
    "1": "3_506",
    "2": "4_506",
    "3": "2_506",
    "4": "2_600",
    "5": "1_650",
    "6": "3_600"
}
在SO答案的帮助下,我计算了发生的次数,并跟踪了我感兴趣的原始数量:

decaAdd_occurrences = {k: (int(k.split('_')[0]), v) for k,v in
                                Counter(Deca_dict.values()).items()}
我修改了答案的代码如下:

changed_deca_dict = {}
alpha_deca_dict = {}
for key, value in Deca_dict.items():
    num, cnt = decaAdd_occurrences[value]
    if cnt > 1:
        route = value.split('_')[1]
        next_num = num + 1
        next_add = str(next_num) + '_' + str(route)
        if not next_add in Deca_dict.values():
            Deca_dict[key] = '{}_{}'.format(next_num, route)
            decaAdd_occurrences[value] = next_num, cnt-1
            changed_deca_dict[key] = '{}_{}_{}'.format(num, next_num, route)
        else:
            alpha_deca_dict[key] = value
这就给了词典:

Deca_dict -> {
    "1": "3_506",
    "2": "2_506",
    "3": "4_506",
    "4": "3_600",
    "5": "1_650",
    "6": "2_600"
}

changed_deca_dict = {'1':'2_3_506', '3':'2_4_506','4':'2_3_600'}
我有另一本字典,上面有相同的键,它们沿着一个轴的距离,这是我试图对这些值进行编号的顺序

distance_dict = {'3': 1.0,'1': 2.2,'2': 3.1,'4': 2.0,'5': 1.5,'6': 3.0}
我如何将其合并到以前的代码中,或者像这样更新Deca_dict:

Deca_dict = {
    "1": "2_506",
    "2": "2_506",
    "3": "2_506",
    "4": "2_600",
    "5": "1_650",
    "6": "2_600"
}
Deca_dict -> {
    "1": "3_506",
    "2": "4_506",
    "3": "2_506",
    "4": "2_600",
    "5": "1_650",
    "6": "3_600"
}
我试图从按相似值对键进行分组开始。我不想对整个值进行比较,所以这是我到目前为止得到的:

for deca_key, deca_value in changed_deca_dict:
    old_num = value.split('_')[0]
    new_num = value.split('_')[1]
    route = value.split('_')[2]
    old_add = str(old_num) + str(route)
    for dist_key, dist_value in distance_dict:
        if dist_key == deca_key:
            check the distance and compare with other Deca_dict.items(), including the one that didn't change
            re-order new_num according to distance along route

如果不允许重复或列表,将重复值收集到一个集合中,并将其作为属性,而不是将重复值编码到字符串中,这不是更优雅吗?类似于changed_deca_dict={'1':{v1:set[2,3],v2:506},{'3':{v1:set[2,4],v2:506},{'4':{v1:set[2,3],v2:600}嗯..好吧,我怎么去那里?为什么更好?我认为它更优雅:你可能会有不同的想法…@boardrider我可能,但我甚至不知道如何去这本词典。还有,你从那里去哪里?