Python 中字典的自定义排序

问题描述 投票:0回答:1

我需要按特定函数对字典进行排序,我使用了人工智能返回的函数,这看起来很逻辑,但我在 x 参数上有一个错误:“reverse=True if x[1] >= 0 else False”

错误=“NameError:名称'x'未定义”

你知道为什么 lambda 无法识别 x 吗?

这是我需要的示例:

dict = {"value1" : "1", "value2" : "2", "value3" : "-2", "value2" : "-5", "value5" : "0"}
dict_sorted = {"value2" : "2", "value1" : "1", "value5" : "0", "value3" : "-2", "value2" : "-5"}

这是我尝试过的功能:



def sort_dictionary(dico):
    """Sorts the values ​​in a dictionary according to the criterion: positive decreasing, negative increasing.

    Args:
        dico: The dictionary to sort.

    Returns:
        A new dictionary sorted.
    """

    # Extract key-value pairs
    items = dico.items()

    # Sort pairs based on value
    items_tries = sorted(items, key=lambda x: x[1], reverse=True if x[1] >= 0 else False)

    # Create a new sorted dictionary
    dico_trie = dict(items_tries)

    return dico_sort
python dictionary sorting
1个回答
0
投票

源字典中的值是字符串,但看起来您想将它们视为数字(整数)。此外,键“value2”出现两次,因此“2”的值将被“-5”覆盖。字典中不能有重复的键。

因此,

d = {"value1" : "1", "value2" : "2", "value3" : "-2", "value2" : "-5", "value5" : "0"}

ds = dict(sorted(d.items(), key=lambda x: int(x[1]), reverse=True))

print(ds)

输出:

{'value1': '1', 'value5': '0', 'value3': '-2', 'value2': '-5'}
© www.soinside.com 2019 - 2024. All rights reserved.