Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据编号的键对dict进行排序_Python_Sorting_Dictionary - Fatal编程技术网

Python 根据编号的键对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'

我想根据具有[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'
        }

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,以使其更清晰。答案如下:非常好!感谢所有这些解决方案!很好!感谢所有这些解决方案!