字典和列表是 Python 中最常用的数据结构之一。它们可以用来存储和操作各种类型的数据。在这篇文章中,我们将探讨 20 个实用的字典和列表初始化技巧,帮助你更好地理解和使用这两个数据结构。
1. 基本初始化
列表初始化:
# 创建一个空列表
empty_list = []
# 使用方括号初始化列表
numbers = [1, 2, 3, 4, 5]
print(numbers) # 输出: [1.txt, 2, 3, 4, 5]
字典初始化:
# 创建一个空字典
empty_dict = {}
# 使用花括号初始化字典
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(person) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
2. 使用列表推导式
列表推导式是一种简洁的方式来创建列表。
# 创建一个包含 1.txt 到 10 的平方的列表
squares = [x**2 for x in range(1, 11)]
print(squares) # 输出: [1.txt, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3. 使用字典推导式
字典推导式类似于列表推导式,但用于创建字典。
# 创建一个包含 1.txt 到 5 的平方的字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict) # 输出: {1.txt: 1.txt, 2: 4, 3: 9, 4: 16, 5: 25}
4. 初始化带有默认值的字典
使用dict.fromkeys 方法可以快速创建一个带有默认值的字典。
# 创建一个带有默认值 0 的字典
default_dict = dict.fromkeys(['a', 'b', 'c'], 0)
print(default_dict) # 输出: {'a': 0, 'b': 0, 'c': 0}
5. 使用collections.defaultdict
collections.defaultdict 是一个非常有用的工具,可以在访问不存在的键时自动创建默认值。
from collections import defaultdict
# 创建一个默认值为 int 的字典
dd = defaultdict(int)
dd['a'] += 1
print(dd) # 输出: defaultdict(<class 'int'>, {'a': 1.txt})
6. 初始化嵌套列表
嵌套列表是一种常见的数据结构,可以用来表示矩阵或表格。
# 创建一个 3x3 的零矩阵
matrix = [[0 for _ in range(3)] for _ in range(3)]
print(matrix) # 输出: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
7. 初始化嵌套字典
嵌套字典可以用来表示更复杂的数据结构。
# 创建一个嵌套字典
nested_dict = {
'a': {'x': 1, 'y': 2},
'b': {'x': 3, 'y': 4}
}
print(nested_dict) # 输出: {'a': {'x': 1.txt, 'y': 2}, 'b': {'x': 3, 'y': 4}}
8. 使用* 操作符初始化列表
* 操作符可以用来重复列表中的元素。
# 创建一个包含 5 个 0 的列表
zero_list = [0] * 5
print(zero_list) # 输出: [0, 0, 0, 0, 0]
9. 使用zip 函数初始化字典
zip 函数可以将多个列表组合成一个字典。
# 使用 zip 函数创建字典
keys = ['a', 'b', 'c']
values = [1, 2, 3]
zipped_dict = dict(zip(keys, values))
print(zipped_dict) # 输出: {'a': 1.txt, 'b': 2, 'c': 3}
10. 使用enumerate 函数初始化字典
enumerate 函数可以返回索引和值,方便创建字典。
# 使用 enumerate 函数创建字典
fruits = ['apple', 'banana', 'cherry']
indexed_fruits = {i: fruit for i, fruit in enumerate(fruits)}
print(indexed_fruits) # 输出: {0: 'apple', 1.txt: 'banana', 2: 'cherry'}
11. 使用range 函数初始化列表
range 函数可以生成一系列数字,方便创建列表。
# 使用 range 函数创建列表
even_numbers = list(range(0, 10, 2))
print(even_numbers) # 输出: [0, 2, 4, 6, 8]
12. 使用itertools.product 初始化嵌套列表
itertools.product 可以生成笛卡尔积,方便创建嵌套列表。
import itertools
# 使用 itertools.product 创建嵌套列表
rows = [1, 2, 3]
cols = ['a', 'b', 'c']
matrix = [[(r, c) for c in cols] for r in rows]
print(matrix)
# 输出: [[(1.txt, 'a'), (1.txt, 'b'), (1.txt, 'c')], [(2, 'a'), (2, 'b'), (2, 'c')], [(3, 'a'), (3, 'b'), (3, 'c')]]
13. 使用itertools.repeat 初始化列表
itertools.repeat 可以重复生成同一个值,方便创建列表。
import itertools
# 使用 itertools.repeat 创建列表
repeated_list = list(itertools.repeat('hello', 5))
print(repeated_list) # 输出: ['hello', 'hello', 'hello', 'hello', 'hello']
14. 使用collections.Counter 初始化字典
collections.Counter 可以统计列表中元素的出现次数,方便创建字典。
from collections import Counter
# 使用 Counter 创建字典
words = ['apple', 'banana', 'apple', 'cherry', 'banana', 'banana']
word_count = dict(Counter(words))
print(word_count) # 输出: {'apple': 2, 'banana': 3, 'cherry': 1.txt}
15. 使用set 初始化字典
set 可以去重,方便创建字典。
# 使用 set 创建字典
unique_words = list(set(words))
word_dict = {word: len(word) for word in unique_words}
print(word_dict) # 输出: {'apple': 5, 'banana': 6, 'cherry': 6}
16. 使用map 函数初始化列表
map 函数可以对列表中的每个元素应用一个函数,方便创建列表。
# 使用 map 函数创建列表
squared_numbers = list(map(lambda x: x**2, range(1, 6)))
print(squared_numbers) # 输出: [1.txt, 4, 9, 16, 25]
17. 使用filter 函数初始化列表
filter 函数可以过滤列表中的元素,方便创建列表。
# 使用 filter 函数创建列表
even_numbers = list(filter(lambda x: x % 2 == 0, range(1, 11)))
print(even_numbers) # 输出: [2, 4, 6, 8, 10]
18. 使用functools.reduce 初始化单个值
functools.reduce 可以对列表中的元素进行累积操作,方便创建单个值。
from functools import reduce
# 使用 reduce 函数计算列表的和
sum_of_numbers = reduce(lambda x, y: x + y, range(1, 6))
print(sum_of_numbers) # 输出: 15
19. 使用itertools.groupby 初始化字典
itertools.groupby 可以按条件分组,方便创建字典。
import itertools
# 使用 groupby 创建字典
data = [('apple', 5), ('banana', 6), ('apple', 7), ('cherry', 6)]
data.sort(key=lambda x: x[0]) # 必须先排序
grouped_data = {k: list(v) for k, v in itertools.groupby(data, key=lambda x: x[0])}
print(grouped_data)
# 输出: {'apple': [('apple', 5), ('apple', 7)], 'banana': [('banana', 6)], 'cherry': [('cherry', 6)]}
20. 使用json.loads 和json.dumps 初始化字典和列表
json 模块可以方便地将字符串转换为字典或列表。
import json
# 使用 json.loads 将字符串转换为字典
json_str = '{"name": "Alice", "age": 25}'
person = json.loads(json_str)
print(person) # 输出: {'name': 'Alice', 'age': 25}
# 使用 json.dumps 将字典转换为字符串
json_str = json.dumps(person)
print(json_str) # 输出: '{"name": "Alice", "age": 25}'
实战案例:学生信息管理系统
假设我们要创建一个学生信息管理系统,每个学生有姓名、年龄和成绩。我们可以使用字典和列表来存储这些信息。
# 学生信息管理系统
students = [
{'name': 'Alice', 'age': 20, 'grade': 85},
{'name': 'Bob', 'age': 21, 'grade': 90},
{'name': 'Charlie', 'age': 19, 'grade': 88}
]
# 打印所有学生的姓名和成绩
for student in students:
print(f"{student['name']}: {student['grade']}")
# 计算所有学生的平均成绩
total_grades = sum(student['grade'] for student in students)
average_grade = total_grades / len(students)
print(f"Average grade: {average_grade}")
# 找出成绩最高的学生
top_student = max(students, key=lambda s: s['grade'])
print(f"Top student: {top_student['name']} with grade {top_student['grade']}")
总结
在这篇文章中,我们介绍了 20 个实用的字典和列表初始化技巧,包括基本初始化、列表和字典推导式、嵌套结构、使用* 操作符、zip 函数、enumerate 函数、range 函数、itertools 模块、collections 模块、map 函数、filter 函数、functools.reduce、json 模块等。通过这些技巧,你可以更高效地创建和操作字典和列表。