首页 > 解决方案 > 排序字典时重写字典键

问题描述

我有一些代码可以根据时间戳对字典进行排序,该值可以正常工作。

我原来的未排序字典的键是按升序排列的整数 (1, 2, 3...)

我的 dict 看起来与此类似:

{1: {'pkt_no': '127', 'timestamp': 1563841184.505932}, 2: {'pkt_no': '128', 'timestamp': 1563841184.506147}}

我正在使用以下代码对字典进行排序:

sorted_packets = sorted(stream['packets'].items(), key=lambda x: x[1]['timestamp'])

排序后,键按其他顺序排列,例如 1、2、4、5、3、6... 等。

我想更新/重写排序字典中的所有键,以便它们再次按升序排列(从 1 开始),而实际项目仍保持新排序的顺序。

如何使用Python 3.7.3最有效地做到这一点。

谢谢。

标签: python-3.x

解决方案


如果您不需要原始键,只需使用values- 那么只需从值及其索引构建一个新的字典(您可以使用enumerate(seq, [start=0])

src = {1: {'pkt_no': '127', 'timestamp': 1563841184.505932}, 2: {'pkt_no': '128', 'timestamp': 1563841184.506147}}
sorted_vals = sorted(src.values(), key=lambda x: x['timestamp'])
result = {i:v for i, v in enumerate(sorted_vals, 1)}

推荐阅读