python - 按对象内的值对字典内的字典进行排序
问题描述
所以我有这本字典:
{
'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)
解决方案
您可以使用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"]
推荐阅读
- java - Spring MVC:使用 Bean 列表提交多行表单
- mysql - MySQL 累计会计年度有条件
- sql - 如何获取上传中缺少图像的行的详细信息
- python - 使用 R 进行切片操作
- hana - 尝试将数据从 NVARCHAR 移动到 HANA 中的 TEXT
- javascript - 使用 Google 表格中的数据填充 html 页面
- android - 如何在 ImageButton 上显示文本?
- google-app-engine - 默认应用程序域未将 URL 更改为分配的自定义域
- java - slf4j+log4j 应用程序如何恢复工作当硬盘已满时
- laravel - 是否可以实现基于字符串的认证