按升序对返回字典中的值列表进行排序python

2024-10-06 12:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

以下函数返回输入字典的相反值,其中原始字典的值用作返回字典的键,原始字典的键用作返回字典的值:

def lower(d):
    return dict((k.lower(), [item.lower() for item in v]) for k, v in d.iteritems())

def reverse_dictionary(input_dict):
    D=lower(input_dict)
    reverse_dict = {}
    for key, value in D.iteritems():
        if not isinstance(value, (list, tuple)):
            value = [value]
        for val in value:
            reverse_dict[val] = reverse_dict.get(val, [])
            reverse_dict[val].append(key)
    for key, value in reverse_dict.iteritems():
        if len(value) == 1:
            reverse_dict[key] = value[0]

    return reverse_dict
input_dict= {'astute': ['Smart', 'clever', 'talented'], 
            'Accurate': ['exact', 'precise'], 
            'exact': ['precise'], 'talented': ['smart', 'keen', 'Bright'], 
            'smart': ['clever', 'bright', 'talented']}
print(reverse_dictionary(input_dict))

但返回字典中的值列表不是按升序排序的。在

此函数返回:

^{pr2}$

正确的输出是:

{'precise': ['accurate', 'exact'], 'clever': ['astute', 'smart'], 'talented': ['astute', 'smart'], 'keen': ['talented'], 'bright': ['smart', 'talented'], 'exact': ['accurate'], 'smart': ['astute', 'talented']}

任何帮助都将不胜感激。在


Tags: keyinforinput字典valuesmartval
3条回答

您可以直接迭代已排序(键、值)对:

for key, value in sorted(D.iteritems()):
    ...

或者在构造完反向字典后对值进行排序:

^{pr2}$

如果希望对值列表进行排序,则需要显式地进行排序。在

这应该是有效的:

def reverse_dictionary(input_dict):
    D=lower(input_dict)
    reverse_dict = {}
    for key, value in D.iteritems():
        if not isinstance(value, (list, tuple)):
            value = [value]
        for val in value:
            reverse_dict[val] = reverse_dict.get(val, [])
            reverse_dict[val].append(key)
    for key, value in reverse_dict.iteritems():
        if len(value) > 1:
            reverse_dict[key] = sorted(value)

reverse_dict只是一个普通的老字典,它没有保持添加元素的顺序,使得整个方法有些毫无意义。相反,如果希望保留插入顺序,则应在初始化此变量时使用collections模块(from collections import OrderedDict)中的OrderedDict

reverse_dict = OrderedDict();

相关问题 更多 >