在Python中不使用sorted函数对字典值进行排序

3
我想对列表中的字典值进行排序,但不使用 sort 函数。我尝试了以下代码,但没有实现预期效果。
dict1={"one":1,"two":2,"three":3}
list1=[]
for i in range(len(dict1)):
    sml=[a for a in dict1.values() if a ==min(dict1.values())]
    key1=[k for k,v in dict1.items() if v ==min(dict1.values())]
    del dict[key1]
    list1.append(sml)

print(list1)

3
为什么你要避免使用排序函数? - Max
1
你应该意识到这个语法:var = [...] 会将 var 变成一个列表而不是一个元素,对吧?所以,在第一次尝试后面加上sml=sml[0]key=key1[0] 这两行代码来获取适当的变量。---编辑:我将此移动到答案中。 - kyriakosSt
此外,您的意思是 del dict1[key] 而不是 del dict[key] - kyriakosSt
1
@juanpa.arrivillaga,原帖明确要求对字典的值进行排序,而不是对字典本身进行排序。这实际上非常合理。 - kyriakosSt
@KyrSt 是的,你是对的。我评论得太早了。 - juanpa.arrivillaga
显示剩余2条评论
1个回答

1
你的方法已经接近正确了。你唯一的错误在于这些行。
sml=[a for a in dict1.values() if a ==min(dict1.values())]
key1=[k for k,v in dict1.items() if v ==min(dict1.values())]

实际上,需要创建 smlkey1 两个列表,其中第一个仅包含最小值,第二个仅包含最小值的键。
(即使只有一个元素,语法 x = [....] 也会将 x 变成列表)。

因此,通过以下方式修改这些行来解决问题:

sml=[a for a in dict1.values() if a ==min(dict1.values())][0]
key1=[k for k,v in dict1.items() if v ==min(dict1.values())][0]

1
为什么不直接使用sml = min(dict1.values())呢?而且为什么要重复所有这些无聊的步骤,只是为了获取键值呢? - ekhumoro
是的,使用“del”命令可以从字典中获取并删除键。而且你说得对,sml = min(dict1.values()) 这个也可以用……我太蠢了 :( - vickey99
@vickey99。我不知道你为什么这样做,而不是直接使用sorted。但无论如何,更好的方法是迭代键的副本,像这样:for key in list(dict1.keys()): - ekhumoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接