我有字典
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}.
有什么建议吗?谢谢。
答案 0 :(得分:4)
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
中将lambda
与key
一起使用
例如:
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对字符串排序的默认设置。您似乎对从字符串中包含的数字得出的顺序感兴趣。