這個問題在這里已經有了答案: 將 pyodbc 游標結果輸出為 python 字典 10 個答案 4 小時前關閉。
所以我使用 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:''}, .....]
我不確定從哪里開始,也許有兩個回圈,一個回圈通過僅回圈第一個括號來創建鍵,然后另一個回圈回圈遍歷括號中的每個位置以獲取每個鍵的值?
uj5u.com熱心網友回復:
嘗試這個:
# 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內置函式
uj5u.com熱心網友回復:
簡單的解決方案
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
uj5u.com熱心網友回復:
您可以做的一件事是匯入 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]].
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496478.html
上一篇:如何將字典值轉換為串列?
