Python程式:將字典列表轉換為列表字典


在Python中,字典是一種內建的資料結構,它以鍵值對的形式儲存資料。它允許根據相應的鍵高效地檢索和修改值。字典中的每個鍵都必須是唯一的,並且與一個特定值相關聯。

列表字典是一個字典,其中與每個鍵關聯的值都是列表。這意味著每個鍵都對映到多個值,並且這些值作為列表中的元素儲存。

另一方面,字典列表是一個列表,其中包含多個字典作為其元素。列表中的每個字典都可以擁有自己的一套鍵值對。

在本文中,我們將學習如何在Python中將字典列表轉換為列表字典。

示例

ListOfDictionaries = [
	{'cricketer': 'virat', 'score': 90},
	{'cricketer': 'chahal', 'score': 30},
	{'cricketer': 'dhoni', 'score': 120},
	{'cricketer': 'pandya', 'score': 110},
	{'cricketer': 'smith', 'score': 115}

]
DictionaryofLists: {'cricketer': ['virat', 'chahal', 'dhoni', 'pandya', 'smith'], 'score': [90, 30, 120, 110, 115]}

使用的方法

以下是完成此任務的各種方法

  • 使用for迴圈

  • 使用字典推導式

  • 使用pandas DataFrame

  • 使用NumPy模組

方法1:使用for迴圈

此方法建立一個名為dictOflists的空字典,用於儲存生成的列表字典。然後,它使用迴圈迭代輸入列表中的每個字典,提取'cricketer'鍵作為字典的鍵,並將整個字典賦值為其值。最後,它顯示生成的列表字典,其中每個板球運動員都是一個鍵,對映到他們各自的得分字典。

演算法(步驟)

以下是執行所需任務的演算法/步驟。

  • 建立一個變數來儲存輸入的字典列表

  • 建立一個空字典來儲存生成的集合字典。

  • 使用for迴圈遍歷輸入字典列表,將輸入字典列表轉換為列表字典。

  • 顯示輸出列表字典。

示例

下面的程式使用for迴圈將字典列表轉換為列表字典。

# input list of dictionaries
inputListOfDicts = [
	{'cricketer': 'virat', 'scores': [40, 70, 90]},
	{'cricketer': 'chahal', 'scores': [10, 25, 30]},
	{'cricketer': 'dhoni', 'scores': [35, 65, 120]},
	{'cricketer': 'pandya', 'scores': [58, 89, 110]},
	{'cricketer': 'smith', 'scores': [76, 110, 115]}

]

# creating an empty dictionary for 
# storing resultant dictionary of lists
dictOflists = {}

# traversing in the input list of dictionaries 
# for converting input list of dictionaries to a dictionary of lists
for i in inputListOfDicts:
  # Getting values
	cricketer = i['cricketer']
	dictOflists[cricketer] = i

# displaying the output dictionary of lists
dictOflists

輸出

{'virat': {'cricketer': 'virat', 'scores': [40, 70, 90]},
 'chahal': {'cricketer': 'chahal', 'scores': [10, 25, 30]},
 'dhoni': {'cricketer': 'dhoni', 'scores': [35, 65, 120]},
 'pandya': {'cricketer': 'pandya', 'scores': [58, 89, 110]},
 'smith': {'cricketer': 'smith', 'scores': [76, 110, 115]}}

方法2:使用字典推導式

Python中的字典推導式是一種簡潔的方式,可以透過迭代現有的序列或可迭代物件來建立字典,應用表示式或條件來生成鍵值對,從而產生簡潔易讀的程式碼。它允許在一行程式碼中建立字典,結合了迭代和轉換。

演算法(步驟)

以下是執行所需任務的演算法/步驟。

  • 建立一個變數來儲存輸入的字典列表

  • 列印字典,其中鍵是inputListOfDicts中第一個字典的鍵。

  • 使用列表推導式列印值,這些值是inputListOfDicts中每個字典的對應值的列表。

示例

下面的程式使用字典推導式將字典列表轉換為列表字典。

# input list of dictionaries
inputListOfDicts = [
	{'cricketer': 'virat', 'score': 90},
	{'cricketer': 'chahal', 'score': 30},
	{'cricketer': 'dhoni', 'score': 120},
	{'cricketer': 'pandya', 'score': 110},
	{'cricketer': 'smith', 'score': 115}

]

# Using list comprehension
print({dict_key: [p[dict_key] for p in inputListOfDicts] for dict_key in inputListOfDicts[0]})

輸出

{'cricketer': ['virat', 'chahal', 'dhoni', 'pandya', 'smith'], 'score': [90, 30, 120, 110, 115]}

方法3:使用pandas DataFrame

在此方法中,我們將使用pandas dataframe將字典列表轉換為列表字典。

語法

pandas.DataFrame(listofdictionary).to_dict(orient=”list”)

引數

  • listofdictionary: 輸入字典列表。

  • to_dict()函式: 將其轉換為字典

  • orient: 轉換為列表

演算法(步驟)

以下是執行所需任務的演算法/步驟。

  • 使用import關鍵字匯入帶有別名的pandas模組。

  • 建立一個變數來儲存輸入的字典列表

  • 將字典列表inputListOfDicts轉換為pandas DataFrame,然後將DataFrame轉換為字典,其中鍵是DataFrame的列名,值是包含每個列值的列表。

示例

下面的程式使用pandas dataframe將字典列表轉換為列表字典

# importing pandas module
import pandas as pd


# input list of dictionaries
inputListOfDicts = [
    {"cricketer": "virat", "score": 90},
    {"cricketer": "chahal", "score": 30},
    {"cricketer": "dhoni", "score": 120},
    {"cricketer": "pandya", "score": 110},
    {"cricketer": "smith", "score": 115},
]

# converting into  dictionary of lists using pandas to_dict()
pd.DataFrame(inputListOfDicts).to_dict(orient="list")

輸出

On executing, the above program will generate the following output –
{'cricketer': ['virat', 'chahal', 'dhoni', 'pandya', 'smith'],
 'score': [90, 30, 120, 110, 115]}

方法4:使用NumPy模組

演算法(步驟)

以下是執行所需任務的演算法/步驟

  • 使用import關鍵字匯入帶有別名的numpy模組。

  • 使用array()函式建立一個numpy陣列。

  • 使用索引訪問陣列值的第一個元素(從0開始)。

  • 使用鍵作為索引列印結果。

下面的程式使用numpy模組將字典列表轉換為列表字典。

# importing numpy module with an alias name 
import numpy as np
 
# creating a numpy array using array() function 
inputArray = np.array([(25, 45), (30, 70)],
				dtype=[('num1', int),
					('num2', int)])
 

# accessing first array element using indexing
# (starts from 0)
print(inputArray[0])
 
# Printing by using key
print(inputArray['num1'])

輸出

On executing, the above program will generate the following output –
(25, 45)
[25 30]

程式碼建立了一個具有指定資料型別和欄位名的NumPy陣列inputArray。然後,它演示了使用索引和基於鍵的索引訪問陣列的元素。

結論

總而言之,本文研究了將字典列表轉換為列表字典的四種不同技術。探討的方法包括傳統的for迴圈迭代、簡潔的字典推導式、pandas DataFrame的使用以及NumPy模組的應用。每種方法都有其自身的優勢和適用性,取決於具體的需要和可用的資源。

更新於:2023年8月17日

334 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.