使用多个命令(Python、curser.execute)列出对字典的理解?
List comprehension to dictionary with multiple commands (Python, curser.execute)?
我使用 Python 3.6。
我已经使用 Pyhive 连接到 Hive,我的光标是 cur。
Objective:
建立一个数据库——字典中的表映射:
dbname1 : 此数据库中的表列表。
我已经使用 for 循环构建了它,但我想将它转移到字典理解中,请告诉我我的字典理解有什么问题:
lst = extract_dbs_tbls(cur, s = 'show databases')
map_tbl_db = {}
for i in lst:
cur.execute("use %s" % i)
map_tbl_db['i'] = extract_dbs_tbls(cur, 'show tables')
注意:lst 是数据库名称的列表,例如 ['default', 'dwh', ...]
基本上我想要的是以下字典理解:
{i:j for i in lst cur.execute('use %i' % i) j = extract_dbs_tbls(cur, s = 'show tables')}
其中 extract_dbs_tbls:
def extract_dbs_tbls(cur, s = 'show tables'):
"Return list of dbs / tables. Note: use before 'use db_name'."
cur.execute(s)
lst = cur.fetchall()
return [j[0] for j in lst];
要调用 cur.execute
作为列表理解中的附加操作,您可以使用一些虚拟变量和列表(cur.execute
放置在列表 [ ]
中以创建一个元素的可迭代对象,只需调用包含的函数)不会在结果字典中使用。并且不需要您的 j
var 并替换为就地调用 extract_dbs_tbls
:
{i: extract_dbs_tbls(cur, s = 'show tables')
for i in lst
for dummy in [cur.execute('use %i' % i)]}
以上相当于你的循环:
map_tbl_db = {}
for i in lst:
cur.execute("use %s" % i)
map_tbl_db[i] = extract_dbs_tbls(cur, 'show tables')
我使用 Python 3.6。 我已经使用 Pyhive 连接到 Hive,我的光标是 cur。
Objective: 建立一个数据库——字典中的表映射: dbname1 : 此数据库中的表列表。
我已经使用 for 循环构建了它,但我想将它转移到字典理解中,请告诉我我的字典理解有什么问题:
lst = extract_dbs_tbls(cur, s = 'show databases')
map_tbl_db = {}
for i in lst:
cur.execute("use %s" % i)
map_tbl_db['i'] = extract_dbs_tbls(cur, 'show tables')
注意:lst 是数据库名称的列表,例如 ['default', 'dwh', ...]
基本上我想要的是以下字典理解:
{i:j for i in lst cur.execute('use %i' % i) j = extract_dbs_tbls(cur, s = 'show tables')}
其中 extract_dbs_tbls:
def extract_dbs_tbls(cur, s = 'show tables'):
"Return list of dbs / tables. Note: use before 'use db_name'."
cur.execute(s)
lst = cur.fetchall()
return [j[0] for j in lst];
要调用 cur.execute
作为列表理解中的附加操作,您可以使用一些虚拟变量和列表(cur.execute
放置在列表 [ ]
中以创建一个元素的可迭代对象,只需调用包含的函数)不会在结果字典中使用。并且不需要您的 j
var 并替换为就地调用 extract_dbs_tbls
:
{i: extract_dbs_tbls(cur, s = 'show tables')
for i in lst
for dummy in [cur.execute('use %i' % i)]}
以上相当于你的循环:
map_tbl_db = {}
for i in lst:
cur.execute("use %s" % i)
map_tbl_db[i] = extract_dbs_tbls(cur, 'show tables')