首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Python入门】Python字典的这些黑科技,你用过几个?

第1章 字典初识

1.1 字典定义与特点

在Python编程语言的宇宙里,字典(dictionary)是一种非常强大的数据结构,它以键-值对(key-value pairs)的形式存储信息,类似于现实生活中的一本详尽的索引目录。每个键都是独一无二的 ,用于标识与其相关联的特定值。字典的魅力在于它提供了近乎瞬时的查找速度 ,这得益于其内部实现的哈希表机制。与列表或元组不同 ,字典是无序集合,这意味着它们不保证元素的插入顺序。

1.2 字典创建方法

创建字典的方式多样,如同调色盘上的色彩 ,每一种都有其独特的应用场景。

直接赋值法

最直观的方法是直接通过花括号{}来初始化一个字典,键值对之间用逗号分隔。

my_dict?=?{'apple':?4,?'banana':?2,?'orange':?1}使用dict()构造函数

另外 ,也可以利用dict()函数来构造字典,这对于动态生成字典或者从其他序列类型转换尤为有用。

another_dict?=?dict(apple=4,?banana=2,?orange=1)通过zip函数配对键值序列

如果键和值分别存储在两个列表中,可以巧妙地利用zip()函数和dict()结合创建字典。

keys?=?['apple',?'banana',?'orange']

values?=?[4,?2,?1]

paired_dict?=?dict(zip(keys,?values))空字典初始化

有时,你可能需要一个空白的字典作为起点,逐步填充。

empty_dict?=?{}

每种方法都有其适用场景,灵活运用这些技巧,能够让你在编写Python程序时更加游刃有余。掌握字典的创建只是探索之旅的开始,接下来深入挖掘其丰富的操作和应用,将使你的代码更加高效、优雅。

第2章 字典基本操作

2.1 添加与修改元素

在字典的日常管理中,添加新键值对或更新已有键对应的值是一项基本技能。让我们一起揭开这神秘面纱。

添加元素

给字典新增一个键值对,只需将其直接赋值给相应键即可。若该键尚不存在,字典会自动为其创建新的键值对;若已存在,则会覆盖原有值。

inventory?=?{'apples':?9,?'oranges':??}

inventory['pears']?=????#?新增键值对?'pears':??修改元素

修改字典中某个键对应的值,同样采用赋值操作。由于字典的键唯一性 ,直接给已有键赋予新值即可完成更新。

inventory['apples']?=?10??#?更新键?'apples'?的值为?102.2 查询与访问元素

字典的核心价值在于快速查找和访问键对应的值。这里提供两种主要方式:

索引访问

使用中括号[]操作符 ,将键名作为索引 ,直接获取对应值。若键不存在,将引发KeyError。

quantity?=?inventory['apples']??#?获取?'apples'?的数量get()方法

更安全的做法是使用get()方法 ,它接受键名作为第一个参数 ,并可选地设置一个默认值作为第二个参数。当键不存在时 ,返回默认值而非抛出异常。

quantity?=?inventory.get('kiwis',?0)??#?若?'kiwis'?不存在?,返回?02.3 删除元素

清理字典时,可能需要移除不再需要的键值对。有两种删除方法可供选择:

del语句

使用del语句配合字典名及待删除键 ,可直接从字典中移除指定键值对。若键不存在,将引发KeyError。

del?inventory['oranges']??#?删除键?'oranges'?及其值pop()方法

pop()方法与del类似,但更显灵活。它既删除键值对,又返回被删除的值。若键不存在 ,可选择抛出异常或通过指定默认值避免异常。

value?=?inventory.pop('grapes')??#?删除并返回?'grapes'?的值,若不存在则引发?KeyError

value?=?inventory.pop('strawberries',?None)??#?删除并返回?'strawberries'?的值,若不存在则返回?None2.4 遍历字典

遍历字典以访问其中的所有键值对,是进行数据处理、分析或展示的关键步骤。有多种遍历方式可供选择:

遍历键

直接迭代字典 ,将依次获得其所有键。

for?fruit?in?inventory:

print(fruit)??#?输出:'apples',?'pears'遍历键值对

利用items()方法,可同时获取键及其对应的值。

for?fruit,?count?in?inventory.items():

print(f"{fruit}:?{count}")??#?输出:'apples:?10',?'pears:??'遍历值或仅键/值

使用values()或keys()方法,可单独遍历字典的值或键。

for?count?in?inventory.values():

print(count)??#?输出:10,??

for?fruit?in?inventory.keys():

print(fruit)??#?输出:'apples',?'pears'

熟练掌握这些基本操作 ,就如同掌握了字典这本神奇宝典的使用指南 ,无论面对何种数据管理需求,都能得心应手、游刃有余。

第3章 字典内置函数与方法 ?

3.1?len()、del()与clear()

掌握字典的维护艺术,离不开几个关键的操作:了解字典的长度、精确移除项或清空整个字典。

?len():这个函数像一位忠实的图书管理员,快速清点字典的键值对总数。

my_dict?=?{'apple':?3,?'banana':?5,?'cherry':?7}

size?=?len(my_dict)??#?size?为?3

?del:当你需要从字典中永久删除特定的键值对时 ,del就像是精确的外科手术刀。

del?my_dict['banana']??#?删除键?'banana'?及其对应的值

?clear():想让字典回归初始的空白页状态?一个简单的clear()足矣。

my_dict.clear()??#?清空字典,使其变为?{}3.2?keys(),?values(),?items()详解

这三位好比字典的三大法宝 ,让你分别访问字典的键、值和键值对。

?keys():它提供了一把钥匙 ,打开字典的门,只显示所有的键。

keys_list?=?list(my_dict.keys())??#?获取所有键组成的列表

?values():它如同一个宝盒,里面装满了字典中所有的值。

values_list?=?list(my_dict.values())??#?获取所有值组成的列表

?items():最全面的视角,它将字典的每一项打包成元组,逐一呈现。

items_list?=?list(my_dict.items())??#?获取所有键值对组成的列表3.3?get()与setdefault()

这两个方法是处理键不存在情况的高手,优雅而高效。

?get():它如同一名外交官,请求键对应的值,若键不存在,可优雅地返回一个默认值。

quantity?=?my_dict.get('pear',?0)??#?如果?'pear'?不存在,返回?0

?setdefault():它不仅具备get()的功能,还能在键不存在时自动添加默认值到字典。

my_dict.setdefault('pear',?2)??#?如果?'pear'?不存在,添加键值对?'pear':?23.4?update()与合并字典

在字典的世界里,合并信息就像是一场友好的聚会,update()是这场聚会的组织者。

?update():它能将另一个字典的键值对合并到当前字典中,如果有重叠的键,则后者覆盖前者。

new_items?=?{'pear':?4,?'orange':?6}

my_dict.update(new_items)??#?合并?new_items?到?my_dict

通过这些内置函数与方法的精妙运用,你便能更加自如地驾驭字典,无论是日常的数据处理还是复杂的逻辑构建,都能游刃有余。

第4章 字典进阶技巧

4.1 字典推导式与生成器表达式

在Python中,字典推导式与生成器表达式是构建字典的高效工具,它们能简化代码,提升可读性。

?字典推导式:它宛如魔法般将列表或其他可迭代对象转化为字典。形式上与列表推导式相似,只是将方括号[ ]替换为花括号{ },且内部包含键值对表达式。

words?=?['apple',?'banana',?'cherry']

lengths_dict?=?{word:?len(word)?for?word?in?words}??#?生成?{'apple':?5,?'banana':?6,?'cherry':?6}

?生成器表达式:对于大型数据集,字典生成器表达式提供了内存友好的替代方案。它与字典推导式语法相似,只是用圆括号( )包裹。生成器表达式返回一个可迭代对象 ,每次迭代返回一个键值对。

words?=?('apple',?'banana',?'cherry')

lengths_gen?=?({word:?len(word)}?for?word?in?words)??#?返回一个生成器对象

for?pair?in?lengths_gen:

print(pair)??#?分别输出?{'apple':?5},?{'banana':?6},?{'cherry':?6}4.2 字典视图与键值对排序

字典视图和排序功能,让你能以不同的视角审视和组织字典内容。

?字典视图:keys(),values(),items()方法返回的对象并非列表,而是视图对象。它们反映字典当前状态 ,且在字典更改时自动更新。视图支持大部分序列操作,如切片、成员测试等。

my_dict?=?{'a':?1,?'b':?2,?'c':?3}

key_view?=?my_dict.keys()

print(list(key_view))??#?输出:['a',?'b',?'c']

my_dict['d']?=?4??#?添加新键值对

print(list(key_view))??#?输出:['a',?'b',?'c',?'d']

?键值对排序:虽然字典本身是无序的 ,但可以通过sorted()函数对键、值或键值对进行排序。结合items()方法,可以轻松得到有序的键值对列表。

my_dict?=?{'banana':??,?'apple':??,?'orange':??}

sorted_pairs?=?sorted(my_dict.items(),?key=lambda?x:?x[1])??#?按值排序

print(sorted_pairs)??#?输出:[('apple',??),?('orange',??),?('banana',??)]4.3 使用defaultdict与Counter提升效率

Python标准库提供了两个字典子类,defaultdict和Counter,它们专为特定场景设计,极大地提高了编码效率。

?defaultdict:当你期望字典在访问不存在的键时自动添加默认值 ,defaultdict就派上了用场。只需在创建时指定默认工厂函数。

from?collections?import?defaultdict

counts?=?defaultdict(int)??#?使用?int()?作为默认值工厂,返回?0

for?fruit?in?['apple',?'banana',?'apple']:

counts[fruit]?+=?1??#?自动添加新键?,无需检查是否存在

print(counts)??#?输出:{'apple':?2,?'banana':?1}

?Counter:Counter类专用于计数任务,它是一个子类化自dict的容器 ,实现了计数统计功能。它可以轻松处理大量数据的频次统计。

from?collections?import?Counter

fruits?=?['apple',?'banana',?'apple',?'cherry',?'banana',?'banana']

fruit_counts?=?Counter(fruits)

print(fruit_counts)??#?输出:Counter({'banana':?3,?'apple':?2,?'cherry':?1})4.4 字典与JSON数据互转

在数据交换或存储场景中 ,JSON格式广泛应用。Python提供了便捷的模块json用于字典与JSON字符串之间的转换。

?字典转JSON:使用json.dumps()方法将字典编码为JSON字符串。

import?json

data?=?{'name':?'Alice',?'age':?30,?'city':?'New?York'}

json_str?=?json.dumps(data)

print(json_str)??#?输出:'{"name":?"Alice",?"age":?30,?"city":?"New?York"}'

?JSON转字典:对应地,json.loads()方法负责将JSON字符串解码回字典。

json_str?=?'{"name":?"Bob",?"age":?35,?"city":?"San?Francisco"}'

loaded_data?=?json.loads(json_str)

print(loaded_data)??#?输出:{'name':?'Bob',?'age':?35,?'city':?'San?Francisco'}

掌握这些进阶技巧,你的字典操作技能将如虎添翼,无论面对何种复杂场景,都能游刃有余地处理字典相关的数据问题。

第5章 实战应用案例

5.1 字典在数据分析中的应用

在数据分析的浩瀚星海中,字典是组织和解析数据的璀璨明星。例如 ,在处理调查问卷数据时,可以用字典来汇总各选项的投票次数。

survey_results?=?{

'Yes':?42,

'No':?17,

'Maybe':?11

}

#?计算总投票数

total_votes?=?sum(survey_results.values())

percentage_yes?=?(survey_results['Yes']?/?total_votes)?*?100

print(f"Yes占比:?{percentage_yes:.2f}%")5.2 字典在网页爬虫中的应用

网络爬虫探索互联网的每一个角落 ,字典常被用来存储抓取的数据 ,便于后续分析。设想爬取一个博客网站的文章标题和链接。

import?requests

from?bs4?import?BeautifulSoup

blog_posts?=?{}

response?=?requests.get("http://example.com/blog")

soup?=?BeautifulSoup(response.text,?'html.parser')

for?post?in?soup.find_all('div',?class_='post'):

title?=?post.find('h2').text

link?=?post.find('a')['href']

blog_posts[title]?=?link

#?打印第一条文章的信息

first_post_title?=?next(iter(blog_posts))

print(f"文章标题:?{first_post_title},?链接:?{blog_posts[first_post_title]}")5.3 字典在数据库查询结果处理中的应用

数据库查询结果通常以行和列的形式呈现 ,将这些结果转化为字典,便于进一步处理或展示。以SQLite数据库为例,查询用户信息并以字典形式存储。

import?sqlite3

conn?=?sqlite3.connect('users.db')

cursor?=?conn.cursor()

cursor.execute("SELECT?id,?username,?email?FROM?users")

rows?=?cursor.fetchall()

#?将查询结果转换为字典列表

users_dict?=?[{column:?row[i]?for?i,?column?in?enumerate(cursor.description)}?for?row?in?rows]

#?查看第一位用户的用户名

first_user?=?users_dict[0]

print(f"第一位用户用户名:?{first_user['username']}")

这些实战案例展示了字典如何成为解决实际问题的利器,无论是在数据的海洋中航行,还是在信息的丛林里探索 ,字典都是不可或缺的导航图。

第6章 总结与思考

Python字典,作为一种键值对数据结构 ,以其独特的哈希表实现提供高效查找与操作。从创建、基本操作到内置函数与方法,再到进阶技巧与实战应用,全方位展现了其在数据分析、网页爬虫及数据库查询等领域的重要作用。与列表、元组等结构对比,字典以键唯一性实现精准访问,而defaultdict与Counter等扩展类进一步提升效率。在项目开发中 ,遵循最佳实践,如合理使用推导式、视图与排序,以及适时转换为JSON数据 ,可显著提升代码质量与可维护性。展望未来,Python字典将持续优化,引入新特性以适应不断变化的编程需求。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OkG00imU7L7Ipm0OjehB6s8A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com