[英]Python, sorted function: sort dictionary by value returns unexpected list
我正在学习 python 排序 function,我有一个 sample_dictionary,我尝试按其值排序。 示例如下: 姓名:年龄对
sample_dict = {'andi': 65, 'george': 34, 'elvis': 44, 'david': 25, 'caleb': 18, 'broady': 27}
# Let's sort a dictionary by value
print("Key-based sort: ", sorted(sample_dict, key=lambda sample_dict: sample_dict[1]))
预期结果如下,因为 caleb 的年龄只有 18 岁,为什么 andi 的年龄是 65 岁:
['caleb', 'david','broady','george','elvis','andi']
但是当我在 python 3 中运行时,结果如下:
['david', 'caleb', 'george', 'elvis', 'andi', 'broady']
大卫25
岁,迦勒18
。 安迪是老大....
为什么 为什么 为什么? 我的理解是错误的 sample_dict[1] 并不意味着年龄?
它将被sorted(sample_dict.items(), key = lambda x: x[1])
当您调用sample_dict.items()
时,它返回一个元组列表,然后 sorted 方法对其进行迭代并使用 lambda 进行排序。
如果您不在sample_dict.items()
上调用它,则 lambda 中的x
获取键值。 你它排序在名称的第二个字符。
@Karl 指出的另一种方法是: sorted(sample_dict, key = lambda x: sample_dict[x])
key=lambda sample_dict: sample_dict[1]
在 lambda 中, sample_dict
不是原始 dict 的名称,而是(因为您重新使用了参数的名称)在 output 中排序的每个 dict 键的名称。 这些键是字符串,因此根据使用[1]
索引这些字符串的结果对它们进行排序。
所以'david'
和'caleb'
是第一个,因为'david'[1]
和'caleb'[1]
都是'a'
,依此类推。
您想要的是使用lambda
的参数来索引sample_dict
,因此它需要一个单独的名称。 因此,例如: key=lambda name: sample_dict[name]
。
或者, [1]
建议您对 dict 的项目(键值对)进行排序。 您需要明确要求: sorted(sample_dict.items(), key=...
。然后我们可以填写我们的密钥 - 现在[1]
是所需的索引。我们仍然应该为lambda
参数使用不同的名称,不过,为了避免混淆。
当您执行 sample_dict[1] 时,您将 go 指向键(名称)的第二个字母。 它是键:值对而不是列表。 您可以使用此代码
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
{k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
改变
print("Key-based sort: ", sorted(sample_dict, key=lambda sample_dict: sample_dict[1]))
至
print("Key-based sort: ", sorted(sample_dict, key=lambda s: sample_dict[s]))
您的代码不起作用的原因是sorted
将接收一个数组,并对每个元素进行排序。
你知道,如果你遍历一个像这样的字典:
for k in dct:
...
该程序将遍历键,它们是字符串,仅此而已。 因此,您正在寻找sorted()
的键将是dict[key]
。
下面将正确吐出您正在寻找的结果。 lambda function 中的“x”指的是字典的键。
print("Key-based sort: ", sorted(sample_dict, key=lambda x: sample_dict[x]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.