Python字典及操作
文章目录
- Python字典
- Python字典类型简介
- 访问字典中的元素
- 1)使用方括号表示法
- 2)使用get()方法
- 添加键值对
- 修改键值对
- 删除键值对
- 遍历字典
- 遍历字典中所有键值对
- 遍历字典中的所有键
- 遍历字典中所有值
- 总结
- Python字典推导
- Python字典推导式简介
- Python字典推导式示例
- 使用Python字典推导式来转换字典
- 使用列表推导式过滤字典
- 总结
Python字典
摘要:在本节中,你将了解Python中的字典类型,它允许你创建一个键值对的集合。
Python字典类型简介
Python字典是一个键值对的集合,其中每个键都与一个值相关联。
键值对中的值可以是数字、字符串、列表、元组,甚至是另一个字典。实际上,你可以使用Python中任何有效的数据类型作为键值对中的值。
键值对中的键必须是不可变的。换句话说,键不能被更改,例如,数字、字符串、元组等。
Python使用花括号 {} 来定义一个字典。在花括号内,你可以放置零个、一个或多个键值对。
以下示例定义了一个空字典:
empty_dict = {}
通常,你会在循环(无论是for循环还是while循环)之前定义一个空字典。然后在循环内部,向字典中添加键值对。
要查看一个字典的类型,可以使用type()
函数,如下所示:
empty_dict = {}print(type(empty_dict))
输出:
<class 'dict'>
以下示例定义了一个包含一些键值对的字典:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}
这个名为person
的字典有五个键值对,它们分别代表名字、姓氏、年龄、最喜欢的颜色以及活跃状态。
访问字典中的元素
要从字典中通过键来访问对应的值,你可以使用方括号表示法或 get()
方法。
1)使用方括号表示法
要访问与某个键关联的值,你需将该键放在方括号内:
dict[key]
以下展示了如何获取 person
字典中与键 first_name
和 last_name
相关联的值:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}
print(person['first_name'])
print(person['last_name'])
输出:
John
Doe
2)使用get()方法
如果你尝试访问一个不存在的键,就会得到一个错误。例如:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}ssn = person['ssn']
错误:
Traceback (most recent call last):File "dictionary.py", line 15, in <module>ssn = person['ssn']
KeyError: 'ssn'
为了避免这种错误,你可以使用字典的 get()
方法:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}ssn = person.get('ssn')
print(ssn)
输出:
None
如果键不存在,get()
方法会返回 None
,而不是抛出 KeyError
异常。请注意,None
表示不存在任何值。
当键不存在时,get()
方法还可以通过将默认值作为第二个参数传入来返回该默认值。
以下示例中,如果 person
字典中不存在 ssn
键,就会返回字符串 '000-00-0000'
:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}ssn = person.get('ssn', '000-00-0000')
print(ssn)
输出:
000-00-0000
添加键值对
由于字典具有动态结构,你可以在任何时候向其中添加新的键值对。
要向字典中添加一个新的键值对,你需要指定字典的名称,接着在方括号中写上新的键,并赋予其新的值。
以下示例向 person
字典中添加了一个新的键值对:
person['gender'] = 'Female'
修改键值对
要修改与某个键相关联的值,你需要指定字典名称,将该键放在方括号中,并赋予与该键相关联的新值:
dict[key] = new_value
代码语言:Python (python)
以下示例修改了 person
字典中与 age
键相关联的值:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}person['age'] = 26print(person)
输出:
{'first_name': 'John', 'last_name': 'Doe', 'age': 26, 'favorite_colors': ['blue', 'green'], 'active': True}
删除键值对
要通过键来删除一个键值对,你可以使用 del
语句:
del dict[key]
在这个语法中,你要指定字典的名称以及你想要删除的键。
以下示例从 person
字典中删除了键 'active'
:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}del person['active']
print(person)
输出:
{'first_name': 'John', 'last_name': 'Doe', 'age': 25, 'favorite_colors': ['blue', 'green']}
遍历字典
要检查一个字典,你可以使用 for
循环来遍历它的键值对、键或者值。
请注意,自 Python 3.7 版本起,当你遍历一个字典时,你获取到的键值对的顺序与你插入它们时的顺序是相同的。
遍历字典中所有键值对
Python字典提供了一个名为 items()
的方法,该方法会返回一个对象,这个对象包含一个列表,列表中的元素是以元组形式呈现的键值对。
例如:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}print(person.items())
输出:
dict_items([('first_name', 'John'), ('last_name', 'Doe'), ('age', 25), ('favorite_colors', ['blue', 'green']), ('active', True)])
要遍历字典中的所有键值对,你可以使用一个 for
循环,并使用两个变量 key
和 value
来解包列表中的每个元组:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}for key, value in person.items():print(f"{key}: {value}")
输出:
first_name: John
last_name: Doe
age: 25
favorite_colors: ['blue', 'green']
active: True
请注意,在 for
循环中你可以使用任何变量名,不一定非得是 key
和 value
。
遍历字典中的所有键
有时候,你可能只想遍历字典中的所有键。在这种情况下,你可以使用 for
循环结合 keys()
方法来实现。
keys()
方法会返回一个对象,该对象包含字典中所有键的列表。
例如:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}for key in person.keys():print(key)
输出:
first_name
last_name
age
favorite_colors
active
实际上,当遍历一个字典时,遍历所有键是默认行为。因此,你无需使用 keys()
方法。
下面的代码与上述示例中的代码会返回相同的输出:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}for key in person:print(key)
遍历字典中所有值
values()
方法会返回一个仅包含值的列表,其中不包含任何键。
要遍历字典中的所有值,你可以使用 for
循环结合 values()
方法:
person = {'first_name': 'John','last_name': 'Doe','age': 25,'favorite_colors': ['blue', 'green'],'active': True
}for value in person.values():print(value)
输出:
John
Doe
25
['blue', 'green']
True
总结
- Python字典是一个键值对的集合,其中每个键都有一个与之关联的值。
- 使用方括号或
get()
方法通过键来访问对应的值。 - 使用
del
语句根据键从字典中删除一个键值对。 - 使用
for
循环遍历字典中的键、值以及键值对。
Python字典推导
摘要:在本节中,你将学习Python字典推导式,以对字典中的元素进行转换或筛选。
Python字典推导式简介
字典推导式使你能够在字典上运行一个for
循环,并对每个元素执行某些操作,比如转换或筛选,然后返回一个新的字典。
与for
循环不同的是,当你正确使用字典推导式时,它提供了一种更具表现力且更简洁的语法。
以下是字典推导式的一般语法:
{key:value for (key,value) in dict.items() if condition}
这个字典推导式表达式会返回一个新的字典,其元素由表达式key:value
指定。
Python字典推导式示例
我们将了解如何使用字典推导式来转换和筛选字典中的元素。
使用Python字典推导式来转换字典
假设你有如下这样一个字典,其元素是股票代码和价格:
stocks = {'AAPL': 121,'AMZN': 3380,'MSFT': 219,'BIIB': 280,'QDEL': 266,'LVGO': 144
}
为了将每支股票的价格提高2%,你可能会写出像这样的一个for循环:
stocks = {'AAPL': 121,'AMZN': 3380,'MSFT': 219,'BIIB': 280,'QDEL': 266,'LVGO': 144
}new_stocks = {}
for symbol, price in stocks.items():new_stocks[symbol] = price*1.02print(new_stocks)
输出:
{'AAPL': 123.42, 'AMZN': 3447.6, 'MSFT': 223.38, 'BIIB': 285.6, 'QDEL': 271.32, 'LVGO': 146.88}
它的工作原理如下:
- 首先,遍历
stocks
字典中的各个键值对。 - 其次,将价格提高2%,然后把该键值对添加到新字典(
new_stocks
)中。
下面的示例展示了如何使用字典推导式来达到相同的结果:
stocks = {'AAPL': 121,'AMZN': 3380,'MSFT': 219,'BIIB': 280,'QDEL': 266,'LVGO': 144
}new_stocks = {symbol: price * 1.02 for (symbol, price) in stocks.items()}print(new_stocks)
这个字典推导式与对应的for循环是等效的:
# for loop
new_stocks = {}
for symbol, price in stocks.items():new_stocks[symbol] = price*1.02# dictionary comprehension
new_stocks = {symbol: price * 1.02 for (symbol, price) in stocks.items()}
使用列表推导式过滤字典
为了筛选出价格大于200的股票,你可以使用以下的for
循环:
stocks = {'AAPL': 121,'AMZN': 3380,'MSFT': 219,'BIIB': 280,'QDEL': 266,'LVGO': 144
}selected_stocks = {}
for symbol, price in stocks.items():if price > 200:selected_stocks[symbol] = priceprint(selected_stocks)
它的工作原理如下:
- 首先,遍历
stocks
字典中的各个键值对。 - 然后,如果价格大于200,就将该键值对添加到
selected_stocks
字典中。
下面的示例使用带有 if
子句的字典推导式来获得相同的结果:
stocks = {'AAPL': 121,'AMZN': 3380,'MSFT': 219,'BIIB': 280,'QDEL': 266,'LVGO': 144
}selected_stocks = {s: p for (s, p) in stocks.items() if p > 200}print(selected_stocks)
并且你可以比较一下这个for
循环和字典推导式:
# for loop
selected_stocks = {}
for symbol, price in stocks.items():if price > 200:selected_stocks[symbol] = price# dictionary comprehension
selected_stocks = {s: p for (s, p) in stocks.items() if p > 200}
总结
- 字典推导式会遍历字典中的各个键值对,并且使你能够通过对每个键值对进行转换或筛选来创建一个新的字典。