本文将介绍高级 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. 使用默认字典
当您通过不存在的键获取字典的值时,将引发异常:
>>> 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 的时间越长,你就会越喜欢它。