Python 根据编号的键对dict进行排序
我想根据具有[0-9]+uz]+模式的键对dict进行排序。我想按升序排列 这就是我目前的处境:Python 根据编号的键对dict进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,我想根据具有[0-9]+uz]+模式的键对dict进行排序。我想按升序排列 这就是我目前的处境: import operator myDict = { '120_str' : 'value', '150_str' : 'value', '110_str' : 'value', '80_str' : 'value', '10_str' : 'value', '20_str' : 'value'
import operator
myDict = {
'120_str' : 'value',
'150_str' : 'value',
'110_str' : 'value',
'80_str' : 'value',
'10_str' : 'value',
'20_str' : 'value'
}
sortedDict = sorted(myDict.items(), key=operator.itemgetter(0))
我实际拥有的:
sortedDict = {
'10_str' : 'value',
'110_str' : 'value',
'120_str' : 'value',
'150_str' : 'value',
'20_str' : 'value',
'80_str' : 'value'
}
我想要的是:
sortedDict = {
'10_str' : 'value',
'20_str' : 'value',
'80_str' : 'value',
'110_str' : 'value',
'120_str' : 'value',
'150_str' : 'value'
}
使用uu分隔的第一个元素int作为排序键:
sorted(myDict.items(), key=lambda x: int(x[0].split('_')[0]))
使用collections.OrderedDict维护订单:
collections.OrderedDict(sorted(myDict.items(), key=lambda x: int(x[0].split('_')[0])))
例如:
使用uu分隔的第一个元素int作为排序键:
sorted(myDict.items(), key=lambda x: int(x[0].split('_')[0]))
使用collections.OrderedDict维护订单:
collections.OrderedDict(sorted(myDict.items(), key=lambda x: int(x[0].split('_')[0])))
例如:
您可以尝试以下方法:
import re
sortedDict = {
'10_str' : 'value',
'110_str' : 'value',
'120_str' : 'value',
'150_str' : 'value',
'20_str' : 'value',
'80_str' : 'value'
}
final_data = sorted(sortedDict.items(), key=lambda x:int(re.findall('^\d+', x[0])[0]))
输出:
[('10_str', 'value'), ('20_str', 'value'), ('80_str', 'value'), ('110_str', 'value'), ('120_str', 'value'), ('150_str', 'value')]
您可以尝试以下方法:
import re
sortedDict = {
'10_str' : 'value',
'110_str' : 'value',
'120_str' : 'value',
'150_str' : 'value',
'20_str' : 'value',
'80_str' : 'value'
}
final_data = sorted(sortedDict.items(), key=lambda x:int(re.findall('^\d+', x[0])[0]))
输出:
[('10_str', 'value'), ('20_str', 'value'), ('80_str', 'value'), ('110_str', 'value'), ('120_str', 'value'), ('150_str', 'value')]
这个怎么样?您可以从字符串中筛选数字,并根据这些数字对词典进行排序 这也不要求您使用特定字符进行拆分。以防万一,如果您的密钥结构发生更改,这仍然有效
sorted(myDict.items(), key=lambda t: int(filter(str.isdigit, t[0])))
这个怎么样?您可以从字符串中筛选数字,并根据这些数字对词典进行排序 这也不要求您使用特定字符进行拆分。以防万一,如果您的密钥结构发生更改,这仍然有效
sorted(myDict.items(), key=lambda t: int(filter(str.isdigit, t[0])))
这里有一种方法,假设输出是一个元组列表。字典不被认为是有序的,尽管它们可能在将来 转换为int后进行排序,然后重新添加字符串格式:
myLst = [(str(k)+'_str', v) for k, v in \
sorted([(int(k.split('_')[0]), v) for k, v in myDict.items()])]
# [('10_str', 'value'),
# ('20_str', 'value'),
# ('80_str', 'value'),
# ('110_str', 'value'),
# ('120_str', 'value'),
# ('150_str', 'value')]
这里有一种方法,假设输出是一个元组列表。字典不被认为是有序的,尽管它们可能在将来 转换为int后进行排序,然后重新添加字符串格式:
myLst = [(str(k)+'_str', v) for k, v in \
sorted([(int(k.split('_')[0]), v) for k, v in myDict.items()])]
# [('10_str', 'value'),
# ('20_str', 'value'),
# ('80_str', 'value'),
# ('110_str', 'value'),
# ('120_str', 'value'),
# ('150_str', 'value')]
字典没有顺序,它们是未排序的。。。使用不同的结构,如列表python 3.7保证顺序与插入顺序相同,但我建议您使用OrderedDict,以使其更清晰。答案如下:字典没有顺序,它们是未排序的。。。使用不同的结构(如列表),python 3.7保证顺序与插入顺序相同,但我建议您使用OrderedDict,以使其更清晰。答案如下:非常好!感谢所有这些解决方案!很好!感谢所有这些解决方案!