玩转字面量:Python中20个实用字典与列表初始化技巧

开发 后端
在这篇文章中,我们介绍了 20 个实用的字典和列表初始化技巧,通过这些技巧,你可以更高效地创建和操作字典和列表。

字典和列表是 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 模块等。通过这些技巧,你可以更高效地创建和操作字典和列表。

责任编辑:赵宁宁 来源: 小白PythonAI编程
相关推荐

2023-11-12 23:08:17

C++初始化

2021-12-26 00:08:35

C++初始化列表

2024-03-13 08:52:43

C++初始化方式

2020-12-03 09:50:52

容器IoC流程

2019-11-04 13:50:36

Java数组编程语言

2009-08-12 17:43:54

双括弧Java语法技巧

2010-01-05 15:35:21

.NET Framew

2021-10-09 07:10:30

Go字面量组合

2010-02-01 14:21:24

C++初始化列表

2024-03-14 09:19:49

2011-06-17 15:29:44

C#对象初始化器集合初始化器

2024-11-13 13:14:38

2022-03-30 08:19:12

JavaGroovy

2024-10-29 11:27:27

2024-06-24 00:05:00

Python代码

2012-05-23 12:46:53

JavaJava类

2009-12-09 11:21:30

Linux实用技巧

2010-01-22 13:16:05

VB.NET初始化数组

2020-09-28 10:58:26

Google AI技术

2024-06-04 12:37:18

点赞
收藏

51CTO技术栈公众号