[英]Python - Turning a list of dictionaries into a dictionary with lists
所以我很難在Python中聚合數據。 我編寫了一個程序,該程序從Oracle DB中提取數據並將其轉換為帶有字典的列表。 每個字典都包含DB列名稱作為鍵
看起來像這樣:
[{ColumnName1 : Value, Columnname2 : Value},
{ColumnName1 : Value, Columnname2 : Value}]
我遇到的問題是多余的列名。 從這個字典列表中,我想創建一個僅包含一次每個列名作為鍵的字典。 之后,添加屬於該列名的值的列表。
有任何想法嗎?
我正在使用Cx_Oracle從數據庫中提取數據。 我正在使用以下代碼創建詞典列表。 我這樣做的原因是因為Oracle_CX不返回列名,而我確實需要這些。
構建字典列表的代碼:
def rows_to_dict_list(cursor):
columns = [i[0] for i in cursor.description]
return [dict(zip(columns, row)) for row in cursor]
代替:
def rows_to_dict_list(cursor):
columns = [i[0] for i in cursor.description]
return [dict(zip(columns, row)) for row in cursor]
嘗試:
def rows_to_dict_list(cursor):
columns = [i[0] for i in cursor.description]
out = {i[0]: [] for i in cursor.description}
for row in cursor:
for key, value in zip(columns, row):
out[key].append(value)
return out
由於密鑰的重復,以前存儲數據的方式確實不是最佳的。 嘗試這個:
old = [{ColumnName1 : Value11, Columnname2 : Value21, ...}, {ColumnName1 : Value12, Columnname2 : Value22, ...}, ...]
new_dict = {}
for subdict in a:
for k, v in subdict.items():
new_dict.setdefault(k, []).append(v) # thanks to @volcano
print(new_dict) # {ColumnName1: [value11, value12, ...], ColumnName1: [value12, value22, ...], ...}
但是,老實說,最好的方法不是首先構建字典列表,而是直接創建列表字典。 現在要有效地做到這一點,您將需要對DB +的結構有更多的了解,我相信您可以自己完成。 只需將查詢元組返回的索引與列名相關聯即可。
希望我能幫上忙。
首先不要列出字典。 建立字典。
def rows_to_lists_dict(cursor):
column_names = [i[0] for i in cursor.description]
columns = {name: [] for name in column_names}
for row in cursor:
for name, column in zip(column_names, row):
columns[name].append(column)
return columns
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.