如何创建一个奇怪的列表格式的字典?



所以我使用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]]

最新更新