排序字典时重新编写字典键

时间:2019-07-23 07:04:08

标签: python-3.x

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

我原来未排序的dict的键是升序(1、2、3 ...)的整数

我的字典看起来像这样:

{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 最有效地做到这一点。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您不需要原始键,只需使用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)}