首页 > 解决方案 > 按对象内的值对字典内的字典进行排序

问题描述

所以我有这本字典:

{
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'}
}

我有一个在其中添加字典的函数:

def add_demon(ctx, arg_name, arg_placement, arg_owner, arg_verifier, arg_difficulty, arg_level_id):
     global DEMONS
     DEMONS[arg_name] = {'placement':arg_placement,
                         'owner':arg_owner,
                         'verifier':arg_verifier,
                         'difficulty':arg_difficulty,
                         'level_id':arg_level_id}

如您所见,添加到DEMONS的每个字典都是相同的类型,具有相同的键等……但值不同。

而且我希望每次调用此函数时,“DEMONS”字典中的字典都会自行排序。喜欢 :

在调用函数之前:

{
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'}
}

函数调用后

{
   'TEST_DEMON_1':
       {'placement': '1',
        'owner': 'Owner1',
        'verifier': 'Verifier1',
        'difficulty': 'Easy',
        'level_id': '1'},
   'TEST_DEMON_2':
       {'placement': '2',
        'owner': 'Owner2',
        'verifier': 'Verifier2',
        'difficulty': 'Medium',
        'level_id': '2'},
   'TEST_DEMON_3':
       {'placement': '3',
        'owner': 'Owner3',
        'verifier': 'Verifier3',
        'difficulty': 'Medium',
        'level_id': '3'},
   'TEST_DEMON_4':
       {'placement': '4',
        'owner': 'Owner4',
        'verifier': 'Verifier4',
        'difficulty': 'Medium',
        'level_id': '4'}
}

我希望该函数根据它们的“放置”属性对每个字典从 1 到“无穷大”进行排序。所以每次我调用该函数时,“DEMONS”中的第一个对象的放置属性设置为1,“DEMONS”中的第二个对象的放置属性设置为2,等等......

我不知道这是否可能,但如果它是真的会帮助我。

谢谢

(如果你需要我解释更多,问我:D)

标签: pythonpython-3.xsortingdictionary

解决方案


您可以使用sorted函数获取键的顺序,例如:

a = {
    "TEST_DEMON_2": {
        "placement": "2",
        "owner": "Owner2",
        "verifier": "Verifier2",
        "difficulty": "Medium",
        "level_id": "2",
    },
    "TEST_DEMON_4": {
        "placement": "4",
        "owner": "Owner4",
        "verifier": "Verifier4",
        "difficulty": "Medium",
        "level_id": "4",
    },
    "TEST_DEMON_3": {
        "placement": "3",
        "owner": "Owner3",
        "verifier": "Verifier3",
        "difficulty": "Medium",
        "level_id": "3",
    },
    "TEST_DEMON_1": {
        "placement": "1",
        "owner": "Owner1",
        "verifier": "Verifier1",
        "difficulty": "Easy",
        "level_id": "1",
    },
}

sorted(a, key=lambda x: a[x]["placement"])
["TEST_DEMON_1", "TEST_DEMON_2", "TEST_DEMON_3", "TEST_DEMON_4"]

推荐阅读