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

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

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

文章目录

      • 1.使用联合运算符合并字典
      • 2.带星号的字典解包
      • 3.使用字典推导式来创建词典
      • 4.反转字典的键和值
      • 技术提升
      • 5.将列表转换为字典
      • 6. 字典排序
      • 7. 使用默认字典
      • 8. 使用计数器
      • 结论

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)

技术提升

本文由技术群粉丝分享,项目源码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

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. 使用默认字典

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

>>> city = {'UK':'London','Japan':'Tokyo'}
>>> print(city['Italy'])
# KeyError: 'Italy'

为避免意外问题,一个好的解决方案是使用 :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 的时间越长,你就会越喜欢它。

你可能感兴趣的:(python,python,开发语言)