簡體   English   中英

Python-將字典列表變成帶有列表的字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM