我需要通过其键的第一个'CSV'重新排序非常大的OrderedDict。例如,我有一个这样的字典:
a = {'40,70': AAAAAA, '0,12': XXXXXXXX, '20,38': YYYYY}
我需要在键的第一个数字上对其进行排序,该键始终是两个数字,并以逗号分隔(然后我需要第二个数字作为排序因子)。值或字母目前不重要。我需要像这样:
b = {'0,12': XXXXXXXX, '20,38': YYYYY, '40,70': AAAAAA}
字典太大,无法在循环中拆分每个键-是否有更快的方法? 我试图使这一点尽可能清楚。
谢谢。
答案 0 :(得分:3)
您可以使用有序字典来对字典进行重新排序
from collections import OrderedDict
OrderedDict(sorted(a.items(), key=lambda ele:[int(item) for item in ele[0].split(',')]))
答案 1 :(得分:2)
最好的方法是在字典中创建tuple
键,然后使用自然顺序进行排序。
如果要将键保留为字符串,则将字典中的项排序为一个元组,并使用键函数将键转换为整数元组。如果前两个数字相等,这将提供决胜局:
a = {'40,70': "AAAAAA", '0,12': "XXXXXXXX", '0,10': "XXXXXXXX", '20,38': "YYYYY"}
import collections
b = collections.OrderedDict(sorted(a.items(),key = lambda e : tuple(map(int,e[0].split(",")))))
print(b)
结果:
OrderedDict([('0,10', 'XXXXXXXX'), ('0,12', 'XXXXXXXX'), ('20,38', 'YYYYY'), ('40,70', 'AAAAAA')])
答案 2 :(得分:0)
使用第二个数字作为决胜局:
ordered_dict = dict(sorted(a.items(), key=lambda x: [int(x[0].split(",")[0]), int(x[0].split(",")[1])]))
答案 3 :(得分:0)
我认为使用OrderedDict可以使用类似这样的东西。 我不确定这是否是最快的方法。
要进行数字排序,我假设您总是在逗号前得到一个整数。
要将第二部分用作第二个键,并将该键变成一个元组。
from collections import OrderedDict
a = {'40,70': 'AAAAAA', '0,12': 'XXXXXXXX', '20,38': 'YYYYY', '0,38': 'AAYY'}
b = OrderedDict(sorted(a.items(), key=lambda x: (int(x[0].split(',')[0]), int(x[0].split(',')[1]))))
print(b)
结果是
OrderedDict([('0,12', 'XXXXXXXX'), ('0,38', 'AAYY'), ('20,38', 'YYYYY'), ('40,70', 'AAAAAA')])
答案 4 :(得分:-2)
使用OrderedDict
from collections import OrderedDict
a = {'40,70': 'AAAAAA', '0,12': 'XXXXXXXX', '20,38': 'YYYYY'}
b = OrderedDict(sorted(a.items()))