字典排序 - 使用 dict.keys() 而不是 dict.items() 的不同结果
Sorting dict - different result using dict.keys() instead of dict.items()
我正在尝试使用 sorted 函数对 python 中的字典进行排序,但是 my_dict.items() 给我正确的结果而 my_dict.keys() 给我不正确的结果
my_dict={"one":1, "two":2,"three":3, "four":4,"five":5}
sorted(my_dict.items(), key=lambda x:x[1], reverse=True)
输出:
[('five', 5), ('four', 4), ('three', 3), ('two', 2), ('one', 1)]
上面是正确的,但我只需要键而不需要相应的值,所以我写了:
sorted(my_dict.keys(), key=lambda x:x[1], reverse=True)
输出:
['two', 'four', 'one', 'five', 'three']
以上是错误的结果,我做错了什么?请帮助我找到正确的解决方案。
在第一种排序中,您将函数 lambda x: x[1]
应用于 my_dict.items()
中的每个元素。 my_dict.items()
给你(键,值)元组,所以你按值排序(在你的情况下是整数)。
在第二种排序中,您将函数 lambda x: x[1]
应用于 my_dict.keys()
中的每个元素。 my_dict.keys()
给你字符串,所以你按每个字符串中的第二个字符排序。
演示:
>>> my_dict = {"one":1, "two":2,"three":3, "four":4,"five":5}
>>> f = lambda x: x[1]
>>> my_dict.items()
dict_items([('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)])
>>> [f(x) for x in my_dict.items()]
[1, 2, 3, 4, 5]
>>> my_dict.keys()
dict_keys(['one', 'two', 'three', 'four', 'five'])
>>> [f(x) for x in my_dict.keys()]
['n', 'w', 'h', 'o', 'i']
您过早地丢弃了这些值 - 您需要它们进行排序。您可以使用您的第一个解决方案,然后 select 每个元组中的第一个元素 在 排序之后:
[key for key, value in sorted(my_dict.items(), key=lambda x:x[1], reverse=True)]
我正在尝试使用 sorted 函数对 python 中的字典进行排序,但是 my_dict.items() 给我正确的结果而 my_dict.keys() 给我不正确的结果
my_dict={"one":1, "two":2,"three":3, "four":4,"five":5}
sorted(my_dict.items(), key=lambda x:x[1], reverse=True)
输出:
[('five', 5), ('four', 4), ('three', 3), ('two', 2), ('one', 1)]
上面是正确的,但我只需要键而不需要相应的值,所以我写了:
sorted(my_dict.keys(), key=lambda x:x[1], reverse=True)
输出:
['two', 'four', 'one', 'five', 'three']
以上是错误的结果,我做错了什么?请帮助我找到正确的解决方案。
在第一种排序中,您将函数 lambda x: x[1]
应用于 my_dict.items()
中的每个元素。 my_dict.items()
给你(键,值)元组,所以你按值排序(在你的情况下是整数)。
在第二种排序中,您将函数 lambda x: x[1]
应用于 my_dict.keys()
中的每个元素。 my_dict.keys()
给你字符串,所以你按每个字符串中的第二个字符排序。
演示:
>>> my_dict = {"one":1, "two":2,"three":3, "four":4,"five":5}
>>> f = lambda x: x[1]
>>> my_dict.items()
dict_items([('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)])
>>> [f(x) for x in my_dict.items()]
[1, 2, 3, 4, 5]
>>> my_dict.keys()
dict_keys(['one', 'two', 'three', 'four', 'five'])
>>> [f(x) for x in my_dict.keys()]
['n', 'w', 'h', 'o', 'i']
您过早地丢弃了这些值 - 您需要它们进行排序。您可以使用您的第一个解决方案,然后 select 每个元组中的第一个元素 在 排序之后:
[key for key, value in sorted(my_dict.items(), key=lambda x:x[1], reverse=True)]