我需要按特定函数对字典进行排序,我使用了人工智能返回的函数,这看起来很逻辑,但我在 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
源字典中的值是字符串,但看起来您想将它们视为数字(整数)。此外,键“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'}