如何对foo、bar中的单值字典按值排序(不排序foo、bar本身)
解决方案
没问题,这个需求实现起来超简单~先我先猜下你的数据结构大概是这样的(要是和实际有出入随时说哈):
original_data = { 'foo': [{'apple': 3}, {'banana': 1}, {'cherry': 2}], 'bar': [{'dog': 5}, {'cat': 4}, {'elephant': 6}] }
核心需求很明确:保持外层的'foo'和'bar'键的顺序完全不变,只对它们各自对应的列表里的单值字典,按照字典里的值进行排序。下面直接上实现方法:
具体代码实现
# 初始化处理后的字典 processed_data = {} # 遍历原字典的键值对,Python 3.7+ 默认保留字典插入顺序 for key, item_list in original_data.items(): # 对列表中的单值字典按值排序 sorted_list = sorted(item_list, key=lambda single_dict: next(iter(single_dict.values()))) processed_data[key] = sorted_list # 查看结果 print(processed_data)
关键代码解释
next(iter(single_dict.values())):因为每个元素都是单值字典,这个写法能快速取出字典里的唯一值(完全不用关心键是什么),非常适合你的场景。- 如果需要降序排序,只需要给
sorted()加个reverse=True参数就行:sorted_list = sorted(item_list, key=lambda single_dict: next(iter(single_dict.values())), reverse=True)
运行结果验证
执行代码后,输出会是这样的:
{ 'foo': [{'banana': 1}, {'cherry': 2}, {'apple': 3}], 'bar': [{'cat': 4}, {'dog': 5}, {'elephant': 6}] }
你看,'foo'和'bar'的顺序和原来一模一样,各自列表里的字典都按值排好序了~
要是你的实际数据结构和我假设的不一样(比如外层是列表而非字典?),可以补充具体结构,我再帮你调整方案~
内容的提问来源于stack exchange,提问作者Makalone LOgman
相关产品推荐
相关产品推荐

