PYTHON基础技能 – Python字典深度探索:25个高级操作技巧

释放双眼,带上耳机,听听看~!

今天,我们踏入字典的神秘森林,挖掘那些不为人知的宝藏。字典,Python中的超级英雄,存储数据的魔法帽,今天我们将解锁它的20个高级特技,让你的代码飞起来!

1. 初始化大法:花式建字典


1
my_dict&nbsp;=&nbsp;{f'key{i}':&nbsp;i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(5)}&nbsp;&nbsp;<em>#&nbsp;利用字典推导,一键五键</em>

这是字典推导式,像变魔术一样快速创建字典,

1
f'key{i}'

是动态生成键,

1
i

为值,效率与优雅并存!

2. 隐形合并术:
1
|

操作符


1
dict1&nbsp;=&nbsp;{'a':&nbsp;1,&nbsp;'b':&nbsp;2}<br>dict2&nbsp;=&nbsp;{'b':&nbsp;3,&nbsp;'c':&nbsp;4}<br>merged&nbsp;=&nbsp;dict1&nbsp;|&nbsp;dict2&nbsp;&nbsp;<em>#&nbsp;新在上,旧被覆盖</em>

从Python 3.9开始,你可以直接用

1
|

来合并字典,简单粗暴,新值覆盖旧值。

3. 深度合并秘籍:
1
deepmerge

合并嵌套字典?标准库没这功能?不怕,咱手写一个!


1
def&nbsp;deepmerge(dict1,&nbsp;dict2):<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;key&nbsp;in&nbsp;dict2:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;key&nbsp;in&nbsp;dict1&nbsp;and&nbsp;isinstance(dict1&#091;key],&nbsp;dict)&nbsp;and&nbsp;isinstance(dict2&#091;key],&nbsp;dict):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deepmerge(dict1&#091;key],&nbsp;dict2&#091;key])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict1&#091;key]&nbsp;=&nbsp;dict2&#091;key]<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dict1

这段代码走的是递归路线,层层深入,直到最底层,确保合并无遗漏。

4. 魔法键值对交换:
1
zip

1
dict

联袂出演


1
keys&nbsp;=&nbsp;&#091;'a',&nbsp;'b',&nbsp;'c']<br>values&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3]<br>swapped&nbsp;=&nbsp;dict(zip(values,&nbsp;keys))&nbsp;&nbsp;<em>#&nbsp;值变键,键变值,乾坤大挪移</em>

1
zip

函数和

1
dict

构造器一结合,瞬间完成键值对的互换,是不是很神奇?

5. 神秘的
1
get

:安全取值法


1
my_dict&nbsp;=&nbsp;{'a':&nbsp;1}<br>print(my_dict.get('b',&nbsp;'不存在的键'))&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;'不存在的键'</em>

1
get

方法取值,即使键不存在也不会抛异常,还可以指定默认值,安全又体贴。

6.
1
update

的奥义:优雅的更新


1
my_dict.update({'d':&nbsp;4})&nbsp;&nbsp;<em>#&nbsp;静悄悄地添加或更新键值</em>

1
update

方法,不声不响地更新字典,还能处理嵌套结构,是个低调的实力派。

7. 键的遍历小径:
1
keys()


1
for&nbsp;key&nbsp;in&nbsp;my_dict.keys():<br>&nbsp;&nbsp;&nbsp;&nbsp;print(key,&nbsp;"=&gt;",&nbsp;my_dict&#091;key])&nbsp;&nbsp;<em>#&nbsp;一步一印,遍历所有键</em>

遍历字典的键,就像在森林中漫步,清晰而有序。

8. 值的探索之旅:
1
values()

1
items()


1
for&nbsp;value&nbsp;in&nbsp;my_dict.values():<br>&nbsp;&nbsp;&nbsp;&nbsp;print(value)&nbsp;&nbsp;<em>#&nbsp;只看果实,不问出处</em><br><br>for&nbsp;key,&nbsp;value&nbsp;in&nbsp;my_dict.items():<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"{key}:&nbsp;{value}")&nbsp;&nbsp;<em>#&nbsp;键值成对,双宿双飞</em>

1
values()

遍历所有值,

1
items()

则是键值对的完美组合,让你的循环更加灵活。

9. 高级筛选:列表推导+字典


1
filtered&nbsp;=&nbsp;{k:&nbsp;v&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;my_dict.items()&nbsp;if&nbsp;v&nbsp;&gt;&nbsp;1}&nbsp;&nbsp;<em>#&nbsp;只保留大于1的值</em>

结合列表推导,轻松过滤出满足条件的键值对,简洁高效。

10. 字典转列表:逆向操作


1
as_list&nbsp;=&nbsp;list(my_dict.items())&nbsp;&nbsp;<em>#&nbsp;字典瞬间变列表,键值对打包带走</em>

当你需要将字典转换为列表时,这招非常实用,尤其是需要排序或进一步处理时。

11. 反转字典:角色互换


1
reversed_dict&nbsp;=&nbsp;{v:&nbsp;k&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;my_dict.items()}&nbsp;&nbsp;<em>#&nbsp;键变值,值变键,反转世界</em>

小心使用,这招可以瞬间改变字典的面貌,但要注意值的唯一性哦!

12. 快速计数:字典的统计力量


1
counts&nbsp;=&nbsp;{}<br>for&nbsp;item&nbsp;in&nbsp;&#091;'apple',&nbsp;'banana',&nbsp;'apple']:<br>&nbsp;&nbsp;&nbsp;&nbsp;counts&#091;item]&nbsp;=&nbsp;counts.get(item,&nbsp;0)&nbsp;+&nbsp;1&nbsp;&nbsp;<em>#&nbsp;统计出现次数,简单粗暴有效</em>

统计元素出现次数的经典用法,适用于快速计数场景。

13. 字典的删除艺术:
1
del

1
pop


1
del&nbsp;my_dict&#091;'a']&nbsp;&nbsp;<em>#&nbsp;直接删除键为'a'的项</em><br>key_to_remove&nbsp;=&nbsp;'b'<br>removed_value&nbsp;=&nbsp;my_dict.pop(key_to_remove,&nbsp;'默认值')&nbsp;&nbsp;<em>#&nbsp;删除并返回值,安全第一</em>

1
del

是粗犷的删除,

1
pop

则更细腻,还能处理不存在的键。

14. 遍历的高级形态:
1
enumerate

与字典


1
<em>#&nbsp;假设我们有列表和字典的关联</em><br>for&nbsp;index,&nbsp;key&nbsp;in&nbsp;enumerate(sorted(my_dict)):<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"第{index+1}个键是:{key}")

结合

1
enumerate

遍历排序后的键,非常适合按序处理字典。

15. 键的唯一性检验:
1
set

的帮忙


1
keys_set&nbsp;=&nbsp;set(my_dict.keys())&nbsp;&nbsp;<em>#&nbsp;转换成集合,检查键的唯一性</em>

利用集合的特性,快速判断键是否重复,或者进行集合运算。

16. 默认工厂:
1
defaultdict


1
from&nbsp;collections&nbsp;import&nbsp;defaultdict<br>dd&nbsp;=&nbsp;defaultdict(int)&nbsp;&nbsp;<em>#&nbsp;缺省值为0,不再担心KeyError</em><br>dd&#091;'new_key']&nbsp;+=&nbsp;1&nbsp;&nbsp;<em>#&nbsp;自动初始化为0,然后加1</em>

1
defaultdict

,自动初始化指定类型的默认值,避免了频繁的

1
if

检查。

17. 深拷贝与浅拷贝:谁是谁的影子?


1
import&nbsp;copy<br>shallow_copy&nbsp;=&nbsp;copy.copy(my_dict)<br>deep_copy&nbsp;=&nbsp;copy.deepcopy(my_dict)<br><em>#&nbsp;浅拷贝复制顶层,深拷贝连深层结构一起复制</em>

了解拷贝的差异,对于处理嵌套字典至关重要。

18. 字典的排序:
1
sorted

的魔法


1
sorted_items&nbsp;=&nbsp;sorted(my_dict.items(),&nbsp;key=lambda&nbsp;x:&nbsp;x&#091;1])&nbsp;&nbsp;<em>#&nbsp;按值排序</em>

通过

1
sorted

函数,你可以按照键或值对字典进行排序,非常灵活。

19. 清空字典:重置之旅


1
my_dict.clear()&nbsp;&nbsp;<em>#&nbsp;一键清空,回归初心</em>

有时候,放下一切,重新开始,也是一种解脱。

20. 字典表达式的奇技:一行代码的艺术


1
ages&nbsp;=&nbsp;{'Alice':&nbsp;30,&nbsp;'Bob':&nbsp;24}<br>age_sum&nbsp;=&nbsp;sum(age&nbsp;for&nbsp;name,&nbsp;age&nbsp;in&nbsp;ages.items()&nbsp;if&nbsp;name.startswith('A'))&nbsp;&nbsp;<em>#&nbsp;只计算名字以'A'开头的人的年龄总和</em>

一行代码解决战斗,展现了Python的优雅与强大。


进阶技巧

21. 字典的合并与更新策略

在合并字典时,有时需要更加精细的控制。例如,如果两个字典有相同的键,你可能想根据某些条件选择值。虽然直接使用

1
update

1
|

可以简单合并,但要实现更复杂的逻辑,可以这样做:


1
def&nbsp;custom_merge(dict1,&nbsp;dict2,&nbsp;selector_func):<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;key,&nbsp;value&nbsp;in&nbsp;dict2.items():<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;key&nbsp;in&nbsp;dict1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selected_value&nbsp;=&nbsp;selector_func(key,&nbsp;dict1&#091;key],&nbsp;value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict1&#091;key]&nbsp;=&nbsp;selected_value<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dict1&#091;key]&nbsp;=&nbsp;value<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dict1<br><br><em>#&nbsp;示例:如果值是数字,取最大值,否则保持原值</em><br>def&nbsp;selector(key,&nbsp;old_val,&nbsp;new_val):<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;isinstance(old_val,&nbsp;(int,&nbsp;float))&nbsp;and&nbsp;isinstance(new_val,&nbsp;(int,&nbsp;float)):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;max(old_val,&nbsp;new_val)<br>&nbsp;&nbsp;&nbsp;&nbsp;else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new_val<br><br>merged_dict&nbsp;=&nbsp;custom_merge(my_dict,&nbsp;another_dict,&nbsp;selector)

22. 字典的映射转换

字典不仅是数据的存储容器,也是转换数据的强大工具。使用字典来定义映射规则,可以轻松转换数据格式。


1
<em>#&nbsp;假设我们有一个代码缩写和全称的映射</em><br>code_to_name&nbsp;=&nbsp;{'APL':&nbsp;'Apple&nbsp;Inc.',&nbsp;'MSFT':&nbsp;'Microsoft&nbsp;Corporation'}<br><br><em>#&nbsp;将一组代码转换为全称列表</em><br>names&nbsp;=&nbsp;&#091;code_to_name&#091;code]&nbsp;for&nbsp;code&nbsp;in&nbsp;&#091;'APL',&nbsp;'MSFT']]

23. 利用字典进行条件判断

字典可以作为查找表,快速执行基于键的条件判断,这在配置管理或错误码映射中特别有用。


1
error_codes&nbsp;=&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;404:&nbsp;"Not&nbsp;Found",<br>&nbsp;&nbsp;&nbsp;&nbsp;500:&nbsp;"Internal&nbsp;Server&nbsp;Error"<br>}<br><br>def&nbsp;get_error_message(code):<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error_codes.get(code,&nbsp;"Unknown&nbsp;Error")<br><br>print(get_error_message(404))&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;Not&nbsp;Found</em>

24. 字典的“视图”操作

字典提供了键视图(

1
keys()

), 值视图(

1
values()

)和项视图(

1
items()

),这些视图是动态的,反映了字典的实时状态。利用它们可以进行高效的操作,比如交集、并集等,尽管直接对视图做集合运算在Python中并不直接支持,但可以间接实现类似效果。


1
dict1&nbsp;=&nbsp;{1:&nbsp;'a',&nbsp;2:&nbsp;'b'}<br>dict2&nbsp;=&nbsp;{2:&nbsp;'b',&nbsp;3:&nbsp;'c'}<br><br><em>#&nbsp;获取两个字典共有的键</em><br>common_keys&nbsp;=&nbsp;set(dict1).intersection(set(dict2))

25. 字典的压缩语法

结合列表推导或生成器表达式,字典的压缩语法可以让代码更加紧凑。


1
<em>#&nbsp;假设我们想基于某个条件快速构建字典</em><br>data&nbsp;=&nbsp;&#091;(1,&nbsp;'apple'),&nbsp;(2,&nbsp;'banana')]<br>filtered_dict&nbsp;=&nbsp;{k:&nbsp;v&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;data&nbsp;if&nbsp;v.startswith('a')}

结语

这些高级技巧展示了Python字典的强大和灵活性。掌握它们,不仅能够提升你的代码质量,还能使你在面对复杂的数据处理任务时游刃有余。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索