所以我使用SQL来尝试描述一个表,并得到一个奇怪的输出,因为我的函数返回一个列表,所以我有这个奇怪的格式,我想把它变成一个字典列表。但我不知道该怎么做。不知道有没有人能给我指个方向。这是我的列表
[['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'],
(('_id', 'bigint(20) unsigned', 'NO', 'PRI', None, ''),
('_load_dt', 'date', 'NO', '', None, ''),
('_load_dt_time', 'timestamp', 'YES', 'MUL', 'current_timestamp()', ''),
('_data_hash', 'char(160)', 'YES', 'UNI', None, ''),
('_host', 'char(200)', 'YES', '', None, ''),
('_port', 'int(6)', 'YES', '', None, ''),
('_schema', 'char(200)', 'YES', '', None, ''),
('_deleted', 'tinyint(1)', 'YES', '', '0', ''),
('acct_id', 'varchar(200)', 'NO', 'MUL', None, ''),
('account_title', 'varchar(200)', 'NO', 'MUL', None, ''),
('signup_date', 'varchar(200)', 'NO', 'MUL', None, ''),
('admin_email', 'varchar(200)', 'NO', 'MUL', None, ''))]
我希望最终结果看起来像这样[{Field:_id, Type:bigint(20) unsigned, Null:No, Key:PRI, Extra:None}, {Field:_load_dt, Type:date, NULL:No, Key:'', Default:None, Extra:''}, .....]
我不知道从哪里开始,也许有两个循环一个通过循环通过第一个括号创建键,然后另一个循环通过括号中的每个位置来获得每个键的值?
试试这个:
# This is the info you provided in the original question:
data = [['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'],
(('_id', 'bigint(20) unsigned', 'NO', 'PRI', None, ''),
('_load_dt', 'date', 'NO', '', None, ''),
('_load_dt_time', 'timestamp', 'YES', 'MUL', 'current_timestamp()', ''),
('_data_hash', 'char(160)', 'YES', 'UNI', None, ''),
('_host', 'char(200)', 'YES', '', None, ''),
('_port', 'int(6)', 'YES', '', None, ''),
('_schema', 'char(200)', 'YES', '', None, ''),
('_deleted', 'tinyint(1)', 'YES', '', '0', ''),
('acct_id', 'varchar(200)', 'NO', 'MUL', None, ''),
('account_title', 'varchar(200)', 'NO', 'MUL', None, ''),
('signup_date', 'varchar(200)', 'NO', 'MUL', None, ''),
('admin_email', 'varchar(200)', 'NO', 'MUL', None, ''))]
# Separate the column definitions and the items themselves:
(cols, items) = data
# Use a list comprehension to create a new list that looks the way you expect:
result = [dict(zip(cols, item)) for item in items]
# Done
print(result)
更多信息,请查看:
- 列表理解
dict
内置功能zip
内置功能
简单解决方案
In [2]: data = [['Field', 'Type', 'Null', 'Key', 'Default', 'Extra'],
...: (('_id', 'bigint(20) unsigned', 'NO', 'PRI', None, ''),
...: ('_load_dt', 'date', 'NO', '', None, ''),
...: ('_load_dt_time', 'timestamp', 'YES', 'MUL', 'current_timestamp()', ''),
...: ('_data_hash', 'char(160)', 'YES', 'UNI', None, ''),
...: ('_host', 'char(200)', 'YES', '', None, ''),
...: ('_port', 'int(6)', 'YES', '', None, ''),
...: ('_schema', 'char(200)', 'YES', '', None, ''),
...: ('_deleted', 'tinyint(1)', 'YES', '', '0', ''),
...: ('acct_id', 'varchar(200)', 'NO', 'MUL', None, ''),
...: ('account_title', 'varchar(200)', 'NO', 'MUL', None, ''),
...: ('signup_date', 'varchar(200)', 'NO', 'MUL', None, ''),
...: ('admin_email', 'varchar(200)', 'NO', 'MUL', None, ''))]
In [5]: fields = data[0]
In [6]: res = []
In [7]: items = data[1]
In [13]: for item in items:
...: resItem = {}
...: for index,fieldItem in enumerate(fields):
...: resItem[fieldItem] = item[index]
...: res.append(resItem)
In [14]: res
您可以做的一件事是导入pandas并执行df = pandas.DataFrame(data[1], columns = data[0])
。这将把您的数据转换成一个数据框架,这可能比字典列表更有用。从数据框中获取字典列表并不太难,例如使用df.to_dict('records')
。如果您只想直接获取字典列表,您可以执行list_of_dicts = [{key: value for key, value in zip(data[0], row)} for row in data[1]]
。