如何在OrderDict中更改订单?

2024-06-11 12:50:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典

from collections import OrderedDict 

md = {"r3":"piz","r1":"pic","r9":"piz","r12":"pic","r19":"lia","r2":"kurcc","r21":"jes","r99":"pic","r111":"kurcc","r116":"kurcc","r211":"ar","r221":"buc"}

print (OrderedDict(sorted(md.items(), key=lambda t: t[0])))

我想从最低的数字开始排序,但我得到了

OrderedDict([('r1', 'pic'), ('r111', 'kurcc'), ('r116', 'kurcc'), ('r12', 'pic'), ('r19', 'lia'), ('r2', 'kurcc'), ('r21', 'jes'), ('r211', 'ar'), ('r221', 'buc'), ('r3', 'piz'), ('r9', 'piz'), ('r99', 'pic')])

我应该如何改变我的代码有r1,r2,r3顺序


Tags: mdordereddictr2r3r1picr12r9
1条回答
网友
1楼 · 发布于 2024-06-11 12:50:25

如果所有键的形式都是'r???',其中???是整数,则可以使用以下排序键:

OrderedDict(sorted(md.items(), key=lambda t: int(t[0][1:])))

因此,我们首先使用t[0]键,就像您自己一样。接下来我们取从索引1开始的子串(因此我们去掉'r'),最后将它转换成int(..)来执行数值比较

这会产生:

>>> OrderedDict(sorted(md.items(), key=lambda t: int(t[0][1:])))
OrderedDict([('r1', 'pic'), ('r2', 'kurcc'), ('r3', 'piz'), ('r9', 'piz'), ('r12', 'pic'), ('r19', 'lia'), ('r21', 'jes'), ('r99', 'pic'), ('r111', 'kurcc'), ('r116', 'kurcc'), ('r211', 'ar'), ('r221', 'buc')])

相关问题 更多 >