Python中的列表推导与字典推导及如何从两个列表生成字典推导

Python中的列表推导与字典推导

Python提供了推导式,作为一种简洁的方式来创建列表、字典,甚至集合。其中最常见的两种是列表推导字典推导。让我们来探讨它们之间的区别以及如何使用它们——包括将两个列表合并成一个字典。

列表推导

列表推导通过遍历一个可迭代对象并应用一个表达式来创建一个列表。

语法:

[expression for item in iterable if condition]

示例:

numbers = [1, 2, 3, 4, 5]
squares = [n**2 for n in numbers]
print(squares)  
# [1, 4, 9, 16, 25]

在这里,squares 是一个列表,其中每个数字都被平方。

 

字典推导式

字典推导式 用于创建一个包含键值对的字典。

语法:

{key_expr: value_expr for item in iterable if condition}
示例:
numbers = [1, 2, 3, 4, 5]
square_dict = {n: n**2 for n in numbers}
print(square_dict)  
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

在这里,每个数字作为键,其平方作为值。

将两个列表合并为字典

假设你有两个列表:

keys = ["a", "b", "c"]
values = [1, 2, 3]

您可以使用字典推导式将它们组合成一个字典。

1. 使用 zip()

最符合Python风格的方法:

my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)  
# {'a': 1, 'b': 2, 'c': 3}

zip() 会将两个列表中的元素配对,直到最短的列表结束。

2. 使用 range() 的索引

如果两个列表长度相同:

my_dict = {keys[i]: values[i] for i in range(len(keys))}
print(my_dict)  
# {'a': 1, 'b': 2, 'c': 3}

3. 使用 enumerate()

通过枚举一个列表并索引另一个列表:

my_dict = {key: values[i] for i, key in enumerate(keys)}
print(my_dict)  
# {'a': 1, 'b': 2, 'c': 3}

4. 添加条件

您可以在组合时进行过滤。例如,只包含大于 1 的值:

my_dict = {keys[i]: values[i] for i in range(len(keys)) if values[i] > 1}
print(my_dict)  
# {'b': 2, 'c': 3}

基本上,只需记住以下几点:

  • 列表推导式 → 创建一个列表。
  • 字典推导式 → 创建一个字典(键值对)。
  • 你可以使用以下方法将两个列表合并为一个字典:
    • zip()(最常用)
    • range() 配合索引
    • enumerate()使用条件进行过滤

如果你有任何问题,请在评论区告诉我,祝你有美好的一天!

更多