我可以通过Python中的数值对文本进行排序吗?

Nat*_*man 11 python sorting string

我在Python中使用以下形式的键:

mydict = {'0'     : 10,
          '1'     : 23,
          '2.0'   : 321,
          '2.1'   : 3231,
          '3'     : 3,
          '4.0.0' : 1,
          '4.0.1' : 10,
          '5'     : 11,
          # ... etc
          '10'    : 32,
          '11.0'  : 3,
          '11.1'  : 243,
          '12.0'  : 3,
          '12.1.0': 1,
          '12.1.1': 2,
          }
Run Code Online (Sandbox Code Playgroud)

一些索引没有子值,一些具有一个子级值,一些具有两个子级值.如果我只有一个子级别,我可以将它们全部视为数字并按数字排序.第二个子级别迫使我将它们全部作为字符串处理.不过,如果我喜欢串排序他们,我将有10以下120以下2.

如何正确排序索引?

注意: 我真正想要做的是打印出按索引排序的字典.如果有更好的方法来做它而不是以某种方式对它进行排序对我没问题.

Ian*_*and 19

你可以按照你想要的方式对键进行排序,将它们分成'.' 然后将每个组件转换为整数,如下所示:

sorted(mydict.keys(), key=lambda a:map(int,a.split('.')))
Run Code Online (Sandbox Code Playgroud)

返回这个:

['0',
 '1',
 '2.0',
 '2.1',
 '3',
 '4.0.0',
 '4.0.1',
 '5',
 '10',
 '11.0',
 '11.1',
 '12.0',
 '12.1.0',
 '12.1.1']
Run Code Online (Sandbox Code Playgroud)

您可以迭代该键列表,并根据需要从字典中提取值.

你也可以对mydict.items()的结果进行排序,非常相似:

sorted(mydict.items(), key=lambda a:map(int,a[0].split('.')))
Run Code Online (Sandbox Code Playgroud)

这为您提供了(键,值)对的排序列表,如下所示:

[('0', 10),
 ('1', 23),
 ('2.0', 321),
 ('2.1', 3231),
 ('3', 3),
 # ...
 ('12.1.1', 2)]
Run Code Online (Sandbox Code Playgroud)