繁体   English   中英

Python 按多个级别上的多个值对字典进行排序

[英]Python sort a dict by multiple values on multiples levels

我有一个 python 列表,我将按多个键排序。

datas = {
    '123': {
        'name': 'Adam',
        'nbgamesTot': 4, 
        'winrateTot': '100.00', 
        'D1': {
            'nbwins': 4, 
            'nbgames': 4, 
            'winrate': 100
        },
        'D2': 'etc...',
    },
    '456': {
        'name': 'Mark', 
        'nbgamesTot': 4, 
        'winrateTot': '25.00', 
        'D1': {
            'nbwins': 1, 
            'nbgames': 4, 
            'winrate': 25
        },
        'D2': 'etc...',
    }, 
    '789': {
        'name': 'Yoko', 
        'nbgamesTot': 4, 
        'winrateTot': '25.00', 
        'D1': {
            'nbwins': 1, 
            'nbgames': 4, 
            'winrate': 25
        },
        'D2': 'etc...',
    }
}


但是当我尝试时:

sorted_datas = sorted(datas.items(), key=lambda x: (x[1]['D1']['nbgames'], x[1]['nbgamesTot'], x[1]['winrateTot']), reverse=True)

我有:洋子:1/4 - 1/4 - 25 马克:1/4 - 1/4 - 25 亚当:4/4 - 4/4 - 100

知道出了什么问题吗? 也许 itemgetter 会是一个更好的主意? 在这种情况下怎么办?

第二个问题:如果我想根据键以不同的顺序排序? (例如:nbgames desc、nbgamestot asc 和 winrate desc?

预先感谢您的帮助

要修复语法错误,请将您的列表更改为以下内容:

datas = [
    {
    '123':
        {
        'name': 'Adam',
        'nbgamesTot': 4,
        'winrateTot':100,
        'D1':
            {
            'nbgames' : 4,
            'nb_win' : 4,
            'winrate':100,
            },
        'D2': 'etc...,'
        }
    },
    {
    '456':
        {
        'name': 'Mark',
        'nbgamesTot': 4,
        'winrateTot':25,
        'D1':
            {
            'nbgames' : 4,
            'nb_win' : 1,
            'winrate':25,
            },
        'D2': 'etc...,'
        }
    },
    {
    '789':
        {
        'name': 'Yoko',
        'nbgamesTot': 4,
        'winrateTot':25,
        'D1':
            {
            'nbgames' : 4,
            'nb_win' : 1,
            'winrate':25
            },
        'D2': 'etc...,'
        }
    }
]

谢谢

我发现了问题。 'winrateTot' 在排序前被格式化 (2.f),因此被认为是类型 'string'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM