如何根据某个值拆分字典列表



我有一个l1 列表

l1 = [
{"kubernetes_pod_name": "1", "resolution_ms": 10, "value": 100},
{"kubernetes_pod_name": "2", "resolution_ms": 10, "value": 200},
{"kubernetes_pod_name": "3", "resolution_ms": 10, "value": 300},
{"kubernetes_pod_name": "4", "resolution_ms": 10, "value": 400},
{"kubernetes_pod_name": "1", "resolution_ms": 10, "value": 102},
{"kubernetes_pod_name": "2", "resolution_ms": 10, "value": 302},
{"kubernetes_pod_name": "3", "resolution_ms": 10, "value": 567},
{"kubernetes_pod_name": "4", "resolution_ms": 10, "value": 850},
...]

我如何制作一个Python解决方案来将l1转换为以下?

l1 = [
[{"kubernetes_pod_name": "1", "resolution_ms": 10, "value": 100},
{"kubernetes_pod_name": "2", "resolution_ms": 10, "value": 200},
{"kubernetes_pod_name": "3", "resolution_ms": 10, "value": 300},
{"kubernetes_pod_name": "4", "resolution_ms": 10, "value": 400}],
[{"kubernetes_pod_name": "1", "resolution_ms": 10, "value": 102},
{"kubernetes_pod_name": "2", "resolution_ms": 10, "value": 302},
{"kubernetes_pod_name": "3", "resolution_ms": 10, "value": 567},
{"kubernetes_pod_name": "4", "resolution_ms": 10, "value": 850}]
...]

我正试图根据它们的显示结构将其制作成一个嵌套列表,并需要在未来的显示中使用这些数据。

拆分的标准基于kubernetes_pod_name的值,但不仅是它自身的值,还有它的部分,在这里,kubernetes_node_name 1,2,3,4出现,然后开始重复,因此为即将到来的重复进行拆分。

感谢

这里的简单逻辑是计算'kubernetes_pod_name'的唯一值,并相应地进行分组

注意:预期所有吊舱名称都将出现在行中

代码:

uni = len(set([l['kubernetes_pod_name'] for l in l1]))
[l1[i:i+uni] for i in range(0, len(l1), uni)]

输出:

[[{'kubernetes_pod_name': '1', 'resolution_ms': 10, 'value': 100},
{'kubernetes_pod_name': '2', 'resolution_ms': 10, 'value': 200},
{'kubernetes_pod_name': '3', 'resolution_ms': 10, 'value': 300},
{'kubernetes_pod_name': '4', 'resolution_ms': 10, 'value': 400}],
[{'kubernetes_pod_name': '1', 'resolution_ms': 10, 'value': 102},
{'kubernetes_pod_name': '2', 'resolution_ms': 10, 'value': 302},
{'kubernetes_pod_name': '3', 'resolution_ms': 10, 'value': 567},
{'kubernetes_pod_name': '4', 'resolution_ms': 10, 'value': 850}]]

使用递归:

def recur(lst, ls, new):
if len(ls)<=1:
return new + [lst[ls[0]:]]
else:
new = new + [lst[ls[0]:ls[1]]]
return recur(lst, ls[1:],new)
recur(l1, list(range(0, len(l1), uni)), [])

最新更新