首页 > 解决方案 > 字符串到字典中的参数

问题描述

我有列值作为 SQL 表(仅使用 1 条记录)

-l oracle -t employee.address -z 85248

当我使用 CX_Oracle 提取数据时,我得到以下数据,这些数据作为 sql_output 存储在一个变量中,如下所示(它在列表中的元组)

sql_output = [('-l oracle -t employee.address -z 85248',), 
 ('-l oracle -t employee.address -z 85249',),
 ('-l oracle -t employee.address -z 85220',),
 ('-l oracle -t employee.address -z 85215',),
 ('-l oracle -t employee.address -z 85240',),
 ('-l oracle -t employee.address -z 85258',)]

在上面的示例中,-l、-t、-z 是我想用作键的参数,我正在列表中查找字典,以便可以循环并运行另一个命令

desire_output = [{'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85248},
 {'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85249},
 {'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85220},
 {'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85215},
 {'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85240},
 {'l': 'oracle', 's': 'employee', 't': 'address', 'z': 85258}]

我试图将其转换为字符串而不是列表中的字典,如下所示

sql_output = [('-l oracle -t employee.address -z 85248',), 
('-l oracle -t employee.address -z 85249',),
('-l oracle -t employee.address -z 85220',),
('-l oracle -t employee.address -z 85215',),
('-l oracle -t employee.address -z 85240',),
('-l oracle -t employee.address -z 85258',)]
dic, lst = {}, []
for item in sql_output:
    itm = ' '.join(item).replace('-','').split(' ')
    dic[itm[0]]=itm[1]
    dic['s']=itm[3].split('.')[0]
    dic['t']=itm[3].split('.')[1]
    dic[itm[4]]=itm[5]
    print(dic)
    lst.append(dic)
print(lst)

结果

[{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}, 
{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}, 
{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}, 
{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}, 
{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}, 
{'l': 'oracle', 's': 'employee', 't': 'address', 'z': '85258'}]

不知道如何实现这一点,我的方式似乎超级复杂,有什么解决方案吗?

标签: pythonpython-3.x

解决方案


推荐阅读