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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告