11个好用到起飞的「Python字典」知识点!

小詹学Python

共 4002字,需浏览 9分钟

 ·

2021-11-09 14:01

  人生苦短,快学Python!

关于Python字典,算是Python中相当重要的数据类型了。在你学会基础知识后,字典这个概念,将会伴随着你后面的学习和工作。
因此,这里有几个相当重要的知识点,大家有必要知道。

字典是否是无序的

关于这个概念,很多朋友不一定清楚。
在 Python 2.7 中,字典是无序结构。字典项目的顺序是混乱的。这意味着项目的顺序是确定性和可重复的。
>>> # Python 2.7
>>> a_dict = {'color''blue''fruit''apple''pet''dog'}
>>> a_dict
{'color''blue''pet''dog''fruit''apple'}
>>> a_dict
{'color''blue''pet''dog''fruit''apple'}
在 Python 3.5 中,字典仍然是无序的,但这次是随机的数据结构。这意味着每次重新运行字典时,您都会得到不同的项目顺序。
>>> # Python 3.5
>>> a_dict = {'color''blue''fruit''apple''pet''dog'}
>>> a_dict
{'color''blue''pet''dog''fruit''apple'}
>>> a_dict
{'color''blue''pet''dog''fruit''apple'}
在 Python 3.6 及更高版本中,字典是有序的数据结构,这意味着它们保持元素的顺序与它们被引入时的顺序相同。
>>> a_dict = {'color''blue''fruit''apple''pet''dog'}
>>> a_dict
{'color''blue''fruit''apple''pet''dog'}
>>> a_dict
{'color''blue''fruit''apple''pet''dog'}

键值互换

假设您有一本字典,由于某种原因需要将键转换为值,值转换为键,应该怎么做呢?
>>> a_dict = {'one'1'two'2'thee'3'four'4}
>>> new_dict = {}
>>> for key, value in a_dict.items():
...     new_dict[value] = key
...
>>> new_dict
{1'one'2'two'3'thee'4'four'}

依据某种条件,过滤字典

有时候,你需要根据某种条件来过滤字典。那么配合if条件语句,是一个很好的选择。
>>> a_dict = {'one'1'two'2'thee'3'four'4}
>>> new_dict = {}  # Create a new empty dictionary
>>> for key, value in a_dict.items():
...     if value <= 2:
...         new_dict[key] = value
...
>>> new_dict
{'one'1'two'2}

利用字典中的值,做一些计算

在Python中遍历字典时。需要进行一些计算也是很常见的。假设您已将公司销售额的数据存储在字典中,现在您想知道一年的总收入。
>>> incomes = {'apple'5600.00'orange'3500.00'banana'5000.00}
>>> total_income = 0.00
>>> for value in incomes.values():
...     total_income += value  # Accumulate the values in total_income
...
>>> total_income
14100.0

字典推导式

字典推导式,是一个和列表推导式一样,具有很强大功能的知识点。因此,大家一定要掌握。
例如,假设您有两个数据列表,您需要根据它们创建一个新字典。
>>> objects = ['blue''apple''dog']
>>> categories = ['color''fruit''pet']
>>> a_dict = {key: value for key, value in zip(categories, objects)}
>>> a_dict
{'color''blue''fruit''apple''pet''dog'}

利用字典推导式,实现键值转换

你会发现,使用字典推导式,是一个更简单、高效的操作。
>>> a_dict = {'one'1'two'2'thee'3'four'4}
>>> new_dict = {value: key for key, value in a_dict.items()}
>>> new_dict
{1'one'2'two'3'thee'4'four'}

利用字典推导式,过滤字典

>>> a_dict = {'one'1'two'2'thee'3'four'4}
>>> new_dict = {k: v for k, v in a_dict.items() if v <= 2}
>>> new_dict
{'one'1'two'2}

利用字典推导式,做一些计算

>>> incomes = {'apple'5600.00'orange'3500.00'banana'5000.00}
>>> total_income = sum([value for value in incomes.values()])
>>> total_income
14100.0

字典排序

从 Python 3.6 开始,字典是有序的数据结构,因此如果您使用 Python 3.6(及更高版本),您将能够通过使用sorted()并借助字典理解对任何字典的键,进行排序。
>> incomes = {'apple'5600.00'orange'3500.00'banana'5000.00}
>>> sorted_income = {k: incomes[k] for k in sorted(incomes)}
>>> sorted_income
{'apple'5600.0'banana'5000.0'orange'3500.0}

内置函数,与字典配合使用

Python 提供了一些内置函数,这些函数在您处理集合(如字典)时可能会很有用。

map()函数

假设您有一个包含一堆产品价格的字典,并且您需要对它们应用折扣。
>>> prices = {'apple'0.40'orange'0.35'banana'0.25}
>>> def discount(current_price):
...     return (current_price[0], round(current_price[1] * 0.952))
...
>>> new_prices = dict(map(discount, prices.items()))
>>> new_prices
{'apple'0.38'orange'0.33'banana'0.24}

filter()函数

假设您想知道单价低于0.40的产品。
>>> prices = {'apple'0.40'orange'0.35'banana'0.25}
>>> def has_low_price(price):
...     return prices[price] < 0.4
...
>>> low_price = list(filter(has_low_price, prices.keys()))
>>> low_price
['orange''banana']

字典解包运算符

这是很多人不清楚的概念,Python 3.5 带来了一个有趣的新特性,因此大家需要着重学习。
您可以使用字典解包运算符 ( **) 将两个字典合并为一个新字典。
>>> vegetable_prices = {'pepper'0.20'onion'0.55}
>>> fruit_prices = {'apple'0.40'orange'0.35'pepper'.25}
>>> {**vegetable_prices, **fruit_prices}
{'pepper'0.25'onion'0.55'apple'0.4'orange'0.35}
如果您尝试合并的字典,具有重复或公共键,则最右侧字典的值将补充上。

E N D

各位伙伴们好,詹帅本帅搭建了一个个人博客和小程序,汇集各种干货和资源,也方便大家阅读,感兴趣的小伙伴请移步小程序体验一下哦!(欢迎提建议)

推荐阅读


牛逼!Python常用数据类型的基本操作(长文系列第①篇)

牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)


浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报