首页 > 解决方案 > 转换具有多个 dict 外观的字符串

问题描述

解释

我正在使用psycopg2来存储我的结果并恢复它们。我在我的表中存储了一个这样的列表:

[{"vlan": "715", "intf": "0/3", "intf2": "0/4"}, {"vlan": "", "intf": "0/5", "intf2": "0/6"}, {"vlan": "", "intf": "0/7", "intf2": ""}]

当我对此表执行 SELECT 时,输出如下:

[('[{"vlan": "715", "intf": "0/3", "intf2": "0/4"}, {"vlan": "", "intf": "0/5", "intf2": "0/6"}, {"vlan": "", "intf": "0/7", "intf2": ""}]',)]

要打印字符串,我会:

test = [('[{"vlan": "715", "intf": "0/3", "intf2": "0/4"}, {"vlan": "", "intf": "0/5", "intf2": "0/6"}, {"vlan": "", "intf": "0/7", "intf2": ""}]',)]

print(type(test))
test = test[0][0]
print(type(test))

out:
<class 'list'>
<class 'str'>

我试过的

我尝试过使用jsonast模块,但由于我认为有多个 dict,我没有成功。

我想做什么

我想浏览字典(当前是一个字符串)并得到如下结果:

for om in test
    print(om["intf"])

out:
0/3
0/5
0/7

或者类似的东西。

希望你明白我想做什么。

标签: pythonpython-3.x

解决方案


您有一个嵌入在 JSON 字符串中的字典列表。

使用此代码提取您的数据:

import json

test = [('[{"vlan": "715", "intf": "0/3", "intf2": "0/4"}, {"vlan": "", "intf": "0/5", "intf2": "0/6"}, {"vlan": "", "intf": "0/7", "intf2": ""}]',)]
j = json.loads(test[0][0]) #list of dicts

for d in j:
    print(d['intf'])

输出:

0/3
0/5
0/7

推荐阅读