【问题标题】:Sorting Dictionnary inside a Dictionnary by value inside the objects按对象内的值对字典内的字典进行排序
【发布时间】:2021-10-15 20:55:09
【问题描述】:

所以我有这本字典:

{
   '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)

【问题讨论】:

  • 你知道python dict 没有排序吗?在集合中有一个特殊的类型叫做OrderedDict
  • @Steven:但由于 python 3.7 不是 dictOrderedDict 几乎相同的东西?
  • 这能回答你的问题吗? How do I sort a dictionary by value?

标签: python python-3.x sorting dictionary


【解决方案1】:

例如,您可以使用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"]

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多