gpt4 book ai didi

python - 从嵌套的dict python中获取数据并且数据类型也是混合的

转载 作者:行者123 更新时间:2023-12-02 02:06:16 26 4
gpt4 key购买 nike

下面给出了 Json 数据,我必须获取给定数据中的坐标并将其列表打印为:

解:[[2, 3], [4, 1], [8, 4], [3, 2]]

data = '{"foo": {"type": "geo", "coords": [2, 3], "children": [{"type": "geo", "coords": [4 , 1], "children": [{"type": "bar", "children": [{"type": "geo", "coords": [8, 4]}]}, {"type": "geo", "coords": [3, 2]}]}]}}'

我已经想出了一个解决方案,但它有索引。我想要一些适用于每种情况的通用解决方案,无论 dict 的结构是什么。是否可以?我是的,那么怎么样?

我的解决方案是:

def fun(data):
coords_list = list()
data = json.loads(data)
for k in data:
if data[k].get('coords') is not None:
coords_list.append(data[k]['coords'])
if data[k].get('children') is not None:
if isinstance(data[k].get('children'), list):
coords = data[k].get('children')[0].get('coords')
coords_list.append(coords)
if isinstance(data[k].get('children')[0].get('children'), list):
coords = data[k].get('children')[0].get('children')[0].get('children')[0].get('coords')
coords_list.append(coords)
coords = data[k].get('children')[0].get('children')[1].get('coords')
coords_list.append(coords)
return coords_list

最佳答案

将 json 转换为字符串可以应用正则表达式。

import re
coords = []
for c in re.findall( r'\[([0-9]), ([0-9])*', str(data)):
coords.append([int(c[0]), int(c[1])])

坐标:

[[2, 3], [4, 1], [8, 4], [3, 2]]

正则表达式解释\[([0-9]), ([0-9])*:

  • \[ 匹配 [
  • (...) 创建一个组,使用两次。启用 c[0]c[1]
  • [0-9]+ 匹配 0-9 之间的所有字符。可以通过[0-9.,]扩展为包含点或逗号。
  • , 两个坐标之间的空格。
  • * 多次执行此操作。这就是我们循环结果的原因。

关于python - 从嵌套的dict python中获取数据并且数据类型也是混合的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68415241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com