我是Python的新手,目前正致力于解决问题以提高编程技能。我正在处理一个问题,我需要在Python中使用stable sort
字典。请看以下细节:在Python中对字典值进行稳定排序
输入:
1 2
16 3
11 2
20 3
3 5
26 4
7 1
22 4
上面的命令,我加为两个lists k and v
:
k = ['1', '16', '11', '20', '3', '26', '7', '22']
v = ['2', '3', '2', '3', '5', '4', '1', '4']
我加入这两个列表成为一个字典把它作为一个键值对。我已使用OrderDict
,因为我想让元素的顺序与它们在输入中的顺序相同。
from collections import OrderedDict
d = OrderedDict(zip(k, v))
现在,我需要以按相反的顺序字典d
相对于值。 (其实,我做一个稳定的排序,自sorted
在Python是一个稳定的排序,我已经使用了来源:Here)对于:
s = sorted(d, key = itemgetter(1), reverse=True)
预期输出:
3 5
26 4
22 4
16 3
20 3
1 2
11 2
7 1
但经过我实现了上面的sorted
函数,我无法获得预期的输出。我得到IndexError: string index out of range
有人可以告诉我我在哪里做错了。我的方法错误或流程错误?你能否告诉我为什么我无法按预期得到产出?提前致谢。任何帮助将非常感激。
感谢您的详细解释。我有几个查询 - 1.为什么字典将键和值保留为字符串,即使所有的值都是整数。 2.只有'd'代替'd.items'有什么区别吗?目的是什么。对不起,如果它听起来很愚蠢,但我只是想更好地理解。 – Dev
@Dev 1)Python是强类型的。这意味着它不会在类型之间默默转换;你必须强制它通过铸造。有一些地方放松了一些地方(例如,不同类型之间的数学运算)。即使这些字符串只包含数字字符,它们仍然是字符串,除非明确地将它们转换为其他字符,否则将永远不会被视为任何不同的东西。 2)迭代只是'd'只会给你钥匙。 'd.items()'返回(key,value)的元组。基本上,它可以为您节省一些额外的字典。 – eestrada