如何对具有非唯一值的反向字典排序?

时间:2019-04-01 22:33:17

标签: python dictionary

因此,对于我的问题,我必须使用提供的具有非唯一值的字典来对词频进行计数并将其反转。

我的问题是我不知道如何按字母顺序对值进行排序(例如1:['jump','jam']需要排序,因此显示为1:['jam','jump ']其中'jump'和'jam'都在提供的字典中出现一次)我有用于反转字典的代码,但值未排序。

def inverted_word_counts(word_count_dict): 
    inverted_dict = {}
    for key, value in word_count_dict.items():
        inverted_dict.setdefault(value, list()).append(key) 
    return inverted_dict

1 个答案:

答案 0 :(得分:1)

您可以使用bisect模块在​​保持排序顺序的同时插入新值。这可能比末尾排序更有效率,也比每次循环迭代中排序都要高效。

例如:

import bisect

d = {'dog':20, 'darn':20, 'dirg':20, 'apple':10, 'zebra':10,'cat':10}

def inverted_word_counts(word_count_dict): 
    inverted_dict = {}
    for key, value in word_count_dict.items():
        bisect.insort(inverted_dict.setdefault(value, list()), key)
    return inverted_dict

inverted_word_counts(d)

# {20: ['darn', 'dirg', 'dog'], 10: ['apple', 'cat', 'zebra']}