📅  最后修改于: 2023-12-03 15:19:06.209000             🧑  作者: Mango
在Python中,字典是一个非常方便的数据结构。但是,当我们需要将一个字典展平成一个列表时,可能会感到有些困难。在本文中,我们将介绍用Python将字典展平成一个列表的方法。
一种常见的方法是递归函数。这个函数将以字典作为输入,并返回一个列表,其中每个元素都是一个元组,包含字典中每个键值对的键和值。
def flatten_dict(d, parent_key='', sep='_'):
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extend(flatten_dict(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
另一种方法是使用迭代器。这个函数将以字典作为输入,并返回一个迭代器,该迭代器将按顺序生成字典中每个键值对的键和值。
def flatten_dict_iter(d, parent_key='', sep='_'):
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extend(flatten_dict_iter(v, new_key, sep=sep))
else:
items.append((new_key, v))
return items
假设我们有一个字典,它表示一组科目和具有其分数的学生:
scores = {
"Math": {
"Alice": 80,
"Bob": 70,
"Carol": 90
},
"English": {
"Alice": 90,
"Bob": 80,
"Carol": 70
},
"Science": {
"Alice": 70,
"Bob": 90,
"Carol": 80
}
}
我们可以使用这两个方法之一来将其展平:
import collections
# 使用递归函数
flat_dict = flatten_dict(scores)
print(flat_dict)
# 使用迭代器
flat_dict = dict(flatten_dict_iter(scores))
print(flat_dict)
输出结果如下:
{
'Math_Alice': 80,
'Math_Bob': 70,
'Math_Carol': 90,
'English_Alice': 90,
'English_Bob': 80,
'English_Carol': 70,
'Science_Alice': 70,
'Science_Bob': 90,
'Science_Carol': 80
}
本文介绍了两种将字典展平的方法:使用递归函数和使用迭代器。这些方法可以大大简化对包含字典的数据结构的操作。