Python实现新增元素后按子字典placement值排序嵌套字典
该需求完全可以实现,Python 3.7及以上版本的原生字典默认保留插入顺序,只需在新增元素后按规则重排字典即可,修改后的代码如下:
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} # 按placement的数值升序重排字典 DEMONS = dict(sorted(DEMONS.items(), key=lambda item: int(item[1]['placement'])))
补充说明
- 排序逻辑中将
placement字符串转为int类型比较,避免出现字符串排序时'10'排在'2'前面的问题 - 如果使用Python 3.6及更早版本,原生字典不保证顺序,可改用
collections.OrderedDict实现:
from collections import OrderedDict 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} # 重排后赋值为OrderedDict DEMONS = OrderedDict(sorted(DEMONS.items(), key=lambda item: int(item[1]['placement'])))
- 若要避免非法的placement值导致报错,可在新增前增加校验逻辑,判断传入的
arg_placement是否可以转为正整数即可。
内容的提问来源于stack exchange,提问作者Cold Fire
相关产品推荐
相关产品推荐

