如何基于字典值排序替换并重新排列Python字典的键?
字典键替换实现方案
需求说明
- 基于
dict_position替换dict_items中的键 - 先将
dict_position['user_03']的字典值按升序排序 - 依据排序后的顺序,重新排列并替换两个字典的对应键
初始数据
初始dict_position
dict_position = {'user_03':{'lbl301':[0,0,1,1],'lbl302':[0,2,1,1],'lbl303':[1,0,1,1],'lbl304':[1,1,1,1],'lbl305':[0,1,1,1]}}
初始dict_items
dict_items = { 'id': {'lbl301': 'select', 'lbl302': 'Create','lbl303':'modify', 'lbl304':'backup', 'lbl305':'settings'}, 'A': {'lbl301':'Select_A','lbl302':'Create_A','lbl303':'Modify_A','lbl304':'Back Up_A','lbl305':'settings_A'}, 'B': {'lbl301':'Select_B','lbl302':'Create_B','lbl303':'Modify_B','lbl304':'Back Up_B','lbl305':'settings_B'}, 'C': {'lbl301':'Select_C','lbl302':'Create_C','lbl303':'Modify_C','lbl304':'Back Up_C','lbl305':'settings_C'} }
用户尝试代码
working_dict_temp,wid_position_dict_temp = {},{} wid_position_list = [] for key, item in dict_position['user_03'].items(): working_dict_temp.update({str(item): key}) if item not in wid_position_list: wid_position_list.append(item) wid_position_list.sort() for a, b in enumerate(wid_position_list): old_key = 'lbl' + str(300 + (a + 1))+"(oldkey)" new_key = working_dict_temp[str(b)] + "(newkey)" wid_position_dict_temp.update({old_key: new_key}) print(wid_position_dict_temp)
完整实现代码
# 1. 对dict_position['user_03']的值进行升序排序,获取排序后的键顺序 sorted_items = sorted(dict_position['user_03'].items(), key=lambda x: x[1]) # 生成新键与旧键的映射:新键是lbl301~lbl305按排序顺序对应旧键 key_mapping = {f'lbl{301+i}': old_key for i, (old_key, _) in enumerate(sorted_items)} # 2. 更新dict_position dict_position['user_03'] = {new_key: dict_position['user_03'][old_key] for new_key, old_key in key_mapping.items()} # 3. 更新dict_items for category in dict_items: dict_items[category] = {new_key: dict_items[category][old_key] for new_key, old_key in key_mapping.items()} # 打印结果 print("更新后的dict_position:") print(dict_position) print("\n更新后的dict_items:") print(dict_items)
预期结果
更新后的dict_position
{'user_03':{'lbl301':[0,0,1,1],'lbl303':[0,2,1,1],'lbl304':[1,0,1,1],'lbl305':[1,1,1,1],'lbl302':[0,1,1,1]}}
更新后的dict_items
{ 'id': {'lbl301': 'select','lbl303': 'Create' ,'lbl304':'modify','lbl305':'backup','lbl302':'settings'}, 'A': {'lbl301':'Select_A','lbl303':'Create_A','lbl304':'Modify_A','lbl305':'Back Up_A','lbl302':'settings_A'}, 'B': {'lbl301':'Select_B','lbl303':'Create_B','lbl304':'Modify_B','lbl305':'Back Up_B','lbl302':'settings_B'}, 'C': {'lbl301':'Select_C ','lbl303':'Create_C','lbl304':'Modify_C','lbl305':'Back Up_C','lbl302':'settings_C'} }
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

