如何排序字典列表使'vid'键始终排在首位?
解决字典内部键顺序调整的问题
你之前用sorted(viri_assets, key=lambda d: list(d.keys()))没用是因为这个方法是对列表里的字典进行排序,而不是修改单个字典内部的键顺序。要让每个字典的vid排第一、name排第二,得重新构造每个字典,利用Python 3.7+字典保留插入顺序的特性来实现。
基础实现(仅处理vid和name)
如果你的字典里只有这两个键,直接用列表推导式重新生成每个字典即可:
viri_assets = [ {'vid': 'transpower_036', 'name': '221_02_PB_520_REF_174050'}, {'name': '242_07_DINA_HSTLR_YT_210238', 'vid': 'transpower_168'}, {'vid': 'transpower_170', 'name': '242_08_DINA_HSTLR_YT_210220'}, {'name': '251_PS04_PB_520_REF_109968', 'vid': 'transpower_166'}, {'vid': 'transpower_165', 'name': '251_PS05_PB_520_REF_109967'}, {'name': '31089', 'vid': 'transpower_064'} ] # 重新构造每个字典,指定键顺序 formatted_assets = [{'vid': d['vid'], 'name': d['name']} for d in viri_assets] # 验证结果 for item in formatted_assets: print(item)
运行后每个字典的键顺序都会是vid在前,name在后。
兼容其他键的情况
如果字典里还有其他键,想要保留它们同时维持vid、name的顺序,可以这样写:
formatted_assets = [] for d in viri_assets: # 先固定vid和name的位置 new_dict = {'vid': d['vid'], 'name': d['name']} # 遍历原字典的其他键,追加到新字典中 for key in d: if key not in ('vid', 'name'): new_dict[key] = d[key] formatted_assets.append(new_dict)
这样既保证了vid和name的顺序,也不会丢失其他键的数据。
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

