python - 如何根据 Python 2.7 中的值列表重新排序 OrderedDict?
问题描述
我正在尝试找出如何使用值列表对我的 OrderedDict 重新排序。这是我的代码:
import collections
dicti = {'a':1, 'b':2, 'c':3}
ordered_dict = collections.OrderedDict(sorted(dicti.items(), key=lambda t: t[0]))
desired_dict_order = [3,2,1]
print 'ordered_dict before reordering =', ordered_dict
for key in desired_dict_order:
ordered_dict[key] = ordered_dict.popitem(key)
print 'ordered_dict after reordering =', ordered_dict
我从这个线程<[please see it] 中得到了这个想法,它也回答了这个问题,但是我在 Python 2.7 中这样做,它似乎不起作用,因为输出产生了这个我不明白的奇怪结果:
ordered_dict before reordering = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
ordered_dict after reordering = OrderedDict([('a', 1), ('b', 2), (1, (2, (3, ('c', 3))))])
它在做什么,我怎样才能以正确的方式实现它?
编辑:我想根据 OrderedDict 的索引重新排序,所以最后我可以重新排序 dict,即使 dict-keys 和 dict-values 是任何东西并且不需要顺序枚举(比如 1, 2、3)
解决方案
ordered_dict = collections.OrderedDict(sorted(dicti.items(), key=lambda t: t[1],reverse=True))
这会产生你想要的吗?因为您已经在键上排序,所以为什么不直接对值进行反向排序呢?
推荐阅读
- c# - Linq Join,按多个字段分组
- python - 如何在我的图形 matplotlib 中从零设置 y 轴
- android - FloatingActionButton 上的意外视图
- excel - 通过保持顺序添加项目 vba
- sql-server - SQL Server 复制清理
- android - LeakCanary 收到 Fragment#onDestroy() 回调并且 Fragment#mFragmentManager 为空
- c# - C# 和 .NET 中的 HttpInterceptor 实现
- c# - 无法加载类型'Microsoft.AspNetCore.Mvc.Formatters.JsonSerializerSettingsProvider
- node.js - 在节点 js 中使用 multer 上传超过 10 个文件时出现 ECONNRESET 错误
- drools - Drools 从 map mvel cast 异常中获取对象