8 个令人惊叹的 Python 字典处理技巧

所有 Python 开发人员几乎每天都需要操作字典。如何才能像那些高级 Python 开发人员一样,用 Pythonic 和优雅的方式处理字典呢。

本文将介绍高级 Python 工程师常用的 dict 操作技巧。希望你能在阅读后得到一些新的想法。喜欢记得收藏、点赞。

1.使用联合运算符合并字典

当然,你可以写 for 循环来组合不同字典的元素。但是从 Python 3.9 开始,你再也不需要手动完成了。

使用联合操作是合并字典的最简单方法。

cities_us = {
    
    'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {
    
    'London': 'UK', 'Birmingham': 'UK'}

cities = cities_us|cities_uk
print(cities)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}

您还可以使用 :|= 进行就地更新

cities_us = {
    
    'New York City': 'US', 'Los Angeles': 'US'}
cities_uk = {
    
    'London': 'UK', 'Birmingham': 'UK'}

cities_us |= cities_uk
print(cities_us)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}

2.带星号的字典解包

由于它的简单性,如果可能的话,我将始终使用联合运算符。

但是,有的公司不可避免地会有一些使用旧版本 Python 。

您可以改用字典解包技巧:

cities_1 = {
    
    'New York City': 'US', 'Los Angeles': 'US'}
cities_2 = {
    
    'London': 'UK', 'Birmingham': 'UK'}

cities = {
    
    **cities_1, **cities_2}
print(cities)
# {'New York City': 'US', 'Los Angeles': 'US', 'London': 'UK', 'Birmingham': 'UK'}

如上所述,在两个星号的帮助下,可以轻松地解包和合并 Python 字典。

3.使用字典推导式来创建词典

与 Python 中的列表推导式一样,字典推导式是一种创建字典的绝妙方式,它使我们可以灵活地过滤数据,因为它可以包含语句。dict理解的模板如下:if

D = {
    
    key: value for key,value in iterable (if condition)}   

下面的示例利用了 dict 推导的强大功能,在一行代码中从两个列表生成一个 dict:

cities = ['London', 'New York', 'Tokyo', 'Cambridge', 'Oxford']
countries = ['UK', 'US', 'Japan', 'UK', 'UK']
uk_cities = {
    
    city:country for city, country in zip(cities, countries) if country == 'UK'}
print(uk_cities)
# {'London': 'UK', 'Cambridge': 'UK', 'Oxford': 'UK'}

4.反转字典的键和值

有许多单行方法可以反转字典的键和值。以下是我最喜欢的三种方法:

cities = {
    
    'London': 'UK', 'Tokyo': 'Japan', 'New York': 'US'}
# Method 1
reversed_cities = {
    
    v: k for k, v in cities.items()}
print(reversed_cities)
# {'UK': 'London', 'Japan': 'Tokyo', 'US': 'New York'}

# Method 2
reversed_cities = dict(zip(cities.values(), cities.keys()))
print(reversed_cities)

# Method 3
reversed_cities = dict(map(reversed, cities.items()))
print(reversed_cities)

5.将列表转换为字典

列表也是一种常用的数据结构。在某些情况下,我们需要将列表转换为字典。

如果列表包含“键”和“值”:

cities = [('London', 'UK'), ('New York', 'US'), ('Tokyo', 'Japan')]
d_cities = dict(cities)
print(d_cities)
# {'London': 'UK', 'New York': 'US', 'Tokyo': 'Japan'}

如果不:

cities = ['London', 'Leeds', 'Birmingham']
d_cities = dict.fromkeys(cities,'UK') # set the default value to 'UK' 
print(d_cities)
# {'London': 'UK', 'Leeds': 'UK', 'Birmingham': 'UK'}

6. 字典排序

只需要一行代码就可以根据需要对列表进行排序:

cities = {
    
    'London': '2', 'Tokyo': '3', 'New York': '1'}
print(sorted(cities.items(),key=lambda d:d[1]))
# [('New York', '1'), ('London', '2'), ('Tokyo', '3')]

7. 使用默认字典

当您通过不存在的键获取字典的值时,将引发异常:

cities = {
    
    'London': '2', 'Tokyo': '3', 'New York': '1'}
print(sorted(cities.items(),key=lambda d:d[1]))
# [('New York', '1'), ('London', '2'), ('Tokyo', '3')]

为避免意外问题,一个好的解决方案是使用 :defaultdict

from collections import defaultdict
city = defaultdict(str)
city['UK'] = 'London'
print(city['Italy'])

如上所示,我们可以避免异常,即使需要一个不存在的 key.defaultdict()

8. 使用计数器

如果你好奇每个字母在一个字符串中出现了多少次,最直观的方法可能是写一个 for 循环来遍历所有字母并计算数字。

但是如果你知道,上面的任务将像下面的代码一样简单:Counter

from collections import Counter

author = "Yang Zhou"
chars = Counter(author)
print(chars)
# Counter({'Y': 1, 'a': 1, 'n': 1, 'g': 1, ' ': 1, 'Z': 1, 'h': 1, 'o': 1, 'u': 1})

该对象帮助我们完成计算部分并将结果保存为字典。如果你能在类似的使用场景中记住这个特殊的字典,它可以为你节省大量的代码编写时间。

结论

掌握 Python 意味着可以用优雅、整洁和 Pythonic 的方式编写相同的程序。你使用 Python 的时间越长,你就会越喜欢它。

猜你喜欢

转载自blog.csdn.net/qq_34160248/article/details/128438929