按键对字典进行排序,其中键是字符串和数字的混合,然后使用已排序的key_values创建新字典

时间:2018-08-09 12:27:02

标签: python sorting dictionary key

我有字典

dict1={'A_11':2,'A_10':5,'A_3':11,'A_2':6}

我想按键对它进行排序并获取

dict1_sorted={'A_2':6,'A_3':11,'A_10':5,'A_11':2}

我尝试过,但仍然可以

{'A_10': 5, 'A_11': 2, 'A_2': 6, 'A_3': 11}.

有什么建议吗?谢谢。

4 个答案:

答案 0 :(得分:4)

除非您使用python3.7,否则

dict不会保留顺序。因此,请改用OrderedDict

>>> from collections import OrderedDict
>>> dict1={'A_11':2,'A_10':5,'A_3':11,'A_2':6}
>>> OrderedDict({k:dict1[k] for k in sorted(dict1, key=lambda x: int(x.split('_')[-1]))})
OrderedDict([('A_2', 6), ('A_3', 11), ('A_10', 5), ('A_11', 2)])

答案 1 :(得分:4)

如果您使用的是Python 3.6+,将对字典进行排序,以便执行以下操作:

dict1={'A_11':2,'A_10':5,'A_3':11,'A_2':6}
def f(k):
    t = k.split('_')
    return t[0], int(t[1])
print({k: dict1[k] for k in sorted(dict1, key=f)})

这将输出:

{'A_2': 6, 'A_3': 11, 'A_10': 5, 'A_11': 2}

如果您使用的是Python的早期版本,则可以用collections.OrderedDict代替字典。

答案 2 :(得分:3)

sorted中将lambdakey一起使用

例如:

dict1={'A_11':2,'A_10':5,'A_3':11,'A_2':6}
print( sorted(dict1.items(), key=lambda x: x[0]) )

输出:

[('A_10', 5), ('A_11', 2), ('A_2', 6), ('A_3', 11)]

from collections import OrderedDict
dict1={'A_11':2,'A_10':5,'A_3':11,'A_2':6}
print( OrderedDict(sorted(dict1.items(), key=lambda x: x[0])) )

答案 3 :(得分:3)

字典不是可排序的数据结构。如果需要订购,则可以使用其他数据类型。我会提出以下建议:

dict1 = {'A_11':2,'A_10':5,'A_3':11,'A_2':6}

orderable = sorted(dict1.items(), key=lambda x: int(x[0].split('_')[-1]))
print(orderable)  # [('A_2', 6), ('A_3', 11), ('A_10', 5), ('A_11', 2)]

也并非您所要求的排序不是Python对字符串排序的默认设置。您似乎对从字符串中包含的数字得出的顺序感兴趣。