循环遍历python变量

循环遍历python变量,python,Python,我有一个变量可以如下所示: ('[{"path": ["$.parent_field.field_1"], "category": "A"}, {"path": ["$.field_2"], "category": "B"}, {"path": ["$.null_path"], "cate

我有一个变量可以如下所示:

('[{"path": ["$.parent_field.field_1"], "category": "A"}, {"path": ["$.field_2"], "category": "B"}, {"path": ["$.null_path"], "category": "C"}]',)
本质上,我在寻找“循环”变量的最佳方法

我想要的结果是:

parent_field.field_1 and field_2
因此,我基本上希望提取路径字段(在
$.
之后),除非它是
null\u path

我尝试过(其中p等于变量):

但这让我觉得我是:

[{"path": ["$.parent_field.field_1"], "category": "A"}, {"path": ["$.field_2"], "category": "B"}, {"path": ["$.null_path"], "category": "C"}]

然后我就不能像希望的那样循环使用I了

这里有一种方法可以在while循环中完成,并在每次迭代时替换旧字符串:

s = '[{"path": ["$.parent_field.field_1"], "category": "A"}, {"path": ["$.field_2"], "category": "B"}, {"path": ["$.null_path"], "category": "C"}]'

while True:
    start = s.find('["$.')+4
    end = s.find('"]')
    if start>0 and end>0:
        print(s[start:end])
        s = s[end+1:]
    else:
        break
为您提供以下打印输出:

parent_field.field_1
field_2
null_path
-----编辑------

如果变量
s
的结构如下所示,则更好的方法可能是这样做:

s = ('[{"path": ["$.parent_field.field_1"], "category": "A"}', '{"path": ["$.field_2"], "category": "B"}', '{"path": ["$.null_path"], "category": "C"}]')

for sub_s in s:
    start = sub_s.find('["$.')+4
    end = sub_s.find('"]')
    if start>0 and end>0:
        print(sub_s[start:end])

首先给出完全相同的打印输出,您需要将
json
字符串转换为
dict
,然后找到相应的条目:

import json
result = json.loads(p[0])  ### it's a single-element tuple
paths = []
for pathdict in result:
    paths.append(pathdict['path'][0]) ## single-element lists

print(path)

['$.parent_field.field_1', '$.field_2', '$.null_path']

如果您实际需要的不仅仅是
'path'
元素,您可以通过各种方式在
pathdict
上循环。

这真的是您的变量吗?它是python dict的python列表的python元组的字符串表示,这看起来很奇怪。你是怎么得到它的?我使用的是psycopg2,它是从DB上的select语句返回的,所以psycopg2将外括号放在它上面,我认为真正的问题不是外括号,而是外引号。您需要的是dict的实际列表:
[{…},{…}]
,而不是它的字符串版本。你可以通过
eval
获得,但我怀疑还有更直接的方法。(我对psycopg2一无所知。)字符串值是有效的json。所以只需执行
json.loads(i)
。啊,所以它是
json
而不是
dict
。这是有道理的。Thx,@ekhumoro。字符串实际上是一个dictsHeh列表。但是你的
json.loads
建议仍然有效,这就足够像json了……好吧,这就是json。顶级项可以是列表或dict,也可以包含类似对象的任意组合。看见
['$.parent_field.field_1', '$.field_2', '$.null_path']