PYTHON基础技能 – Python高手秘籍:17个字典推导式实战案例

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

今天我们要探索字典推导式的奥秘。别看它名字复杂,其实它就是一种让你的代码变得更加简洁、优雅的秘密武器。

第一站:基础岛

案例1:简单转换

想象一下,你有一堆人的名字(列表),你想把它们变成大写形式的字典键值对。


1
names&nbsp;=&nbsp;&#091;'Alice',&nbsp;'Bob',&nbsp;'Charlie']<br>upper_names&nbsp;=&nbsp;{name:&nbsp;name.upper()&nbsp;for&nbsp;name&nbsp;in&nbsp;names}<br>print(upper_names)

这行代码的意思是:“对于names里的每个名字,创建一个新的键值对,键是名字本身,值是名字的大写形式。”简单吧?

第二站:映射大陆

案例2:数值翻倍

你得到了一个数字列表,想得到一个新字典,其中每个数字翻倍。


1
numbers&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3]<br>doubled&nbsp;=&nbsp;{num:&nbsp;num&nbsp;*&nbsp;2&nbsp;for&nbsp;num&nbsp;in&nbsp;numbers}<br>print(doubled)

“每一个数字,乘以2,装进字典”,搞定!

第三站:条件海域

案例3:筛选偶数

只保留列表中偶数的键值对。


1
numbers&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5]<br>even_only&nbsp;=&nbsp;{num:&nbsp;"Even"&nbsp;for&nbsp;num&nbsp;in&nbsp;numbers&nbsp;if&nbsp;num&nbsp;%&nbsp;2&nbsp;==&nbsp;0}<br>print(even_only)

“如果数字能被2整除,就让它成为字典的一部分。”

第四站:复合键值

案例4:姓名与年龄

给定两个列表,创建一个字典,名字作为键,年龄作为值。


1
names&nbsp;=&nbsp;&#091;'Alice',&nbsp;'Bob']<br>ages&nbsp;=&nbsp;&#091;24,&nbsp;30]<br>name_age&nbsp;=&nbsp;{name:&nbsp;age&nbsp;for&nbsp;name,&nbsp;age&nbsp;in&nbsp;zip(names,&nbsp;ages)}<br>print(name_age)

“手拉手,一对一对进字典。”

第五站:嵌套冒险

案例5:嵌套列表转字典

假设你有嵌套列表,想提取每个子列表的第一个元素作为键,整个子列表作为值。


1
data&nbsp;=&nbsp;&#091;&#091;'John',&nbsp;28],&nbsp;&#091;'Anna',&nbsp;24],&nbsp;&#091;'Peter',&nbsp;35]]<br>nested_dict&nbsp;=&nbsp;{item&#091;0]:&nbsp;item&nbsp;for&nbsp;item&nbsp;in&nbsp;data}<br>print(nested_dict)

“每个小队的第一个成员当队长,整个小队跟着走。”

第六站:集合挑战

案例6:列表去重

将两个列表的交集作为键,它们在原列表中的索引作为值。


1
list1&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3,&nbsp;4]<br>list2&nbsp;=&nbsp;&#091;2,&nbsp;3,&nbsp;4,&nbsp;5]<br>indexes&nbsp;=&nbsp;{val:&nbsp;(i,&nbsp;j)&nbsp;for&nbsp;i,&nbsp;x&nbsp;in&nbsp;enumerate(list1)&nbsp;for&nbsp;j,&nbsp;y&nbsp;in&nbsp;enumerate(list2)&nbsp;if&nbsp;x&nbsp;==&nbsp;y}<br>print(indexes)

“找到共同点,记住他们的家。”

第七站:字符串乐园

案例7:字符频率

统计字符串中每个字符出现的次数。


1
text&nbsp;=&nbsp;"hello&nbsp;world"<br>freq&nbsp;=&nbsp;{char:&nbsp;text.count(char)&nbsp;for&nbsp;char&nbsp;in&nbsp;text}<br>print(freq)

“每个字母,数一数你的朋友们。”

第八站:逻辑迷宫

案例8:基于条件的映射

创建一个字典,键是数字,值是该数字是否为质数的判断结果。


1
def&nbsp;is_prime(n):<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;n&nbsp;&gt;&nbsp;1&nbsp;and&nbsp;all(n&nbsp;%&nbsp;i&nbsp;for&nbsp;i&nbsp;in&nbsp;range(2,&nbsp;int(n**0.5)&nbsp;+&nbsp;1))<br><br>numbers&nbsp;=&nbsp;list(range(1,&nbsp;11))<br>prime_check&nbsp;=&nbsp;{num:&nbsp;is_prime(num)&nbsp;for&nbsp;num&nbsp;in&nbsp;numbers}<br>print(prime_check)

“对于每个数字,做个质数测试。”

第九站:字典合并

案例9:合并字典

合并两个字典,相同键的值相加。


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;{k:&nbsp;dict1.get(k,&nbsp;0)&nbsp;+&nbsp;dict2.get(k,&nbsp;0)&nbsp;for&nbsp;k&nbsp;in&nbsp;set(dict1)&nbsp;|&nbsp;set(dict2)}<br>print(merged)

“你一半,我一半,合并起来不重叠。”

第十站:转换工厂

案例10:JSON到字典

解析简单的JSON字符串到字典。


1
import&nbsp;json<br>json_str&nbsp;=&nbsp;'{"name":&nbsp;"Alice",&nbsp;"age":&nbsp;30}'<br>parsed_json&nbsp;=&nbsp;json.loads(json_str)<br>print(parsed_json)

“从字符串的魔法中解放数据。”

第十一站:高级筛选

案例11:基于多个条件的字典生成

从一个大字典中根据多个条件筛选出子字典。


1
big_dict&nbsp;=&nbsp;{'a':&nbsp;1,&nbsp;'b':&nbsp;2,&nbsp;'c':&nbsp;3,&nbsp;'d':&nbsp;4,&nbsp;'e':&nbsp;5}<br>filtered&nbsp;=&nbsp;{k:&nbsp;v&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;big_dict.items()&nbsp;if&nbsp;v&nbsp;&gt;&nbsp;2&nbsp;and&nbsp;v&nbsp;&lt;&nbsp;5}<br>print(filtered)

“严格筛选,只留下符合条件的。”

第十二站:终极挑战

案例12:字典中字典的创造

创建一个字典,每个键对应另一个字典,根据一些复杂的规则。


1
keys&nbsp;=&nbsp;&#091;'A',&nbsp;'B',&nbsp;'C']<br>values&nbsp;=&nbsp;&#091;{'x':&nbsp;1,&nbsp;'y':&nbsp;2},&nbsp;{'x':&nbsp;3,&nbsp;'y':&nbsp;4},&nbsp;{'x':&nbsp;5,&nbsp;'y':&nbsp;6}]<br>compound_dict&nbsp;=&nbsp;{k:&nbsp;{f'val_{i}':&nbsp;v&#091;i]&nbsp;for&nbsp;i&nbsp;in&nbsp;v}&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;zip(keys,&nbsp;values)}<br>print(compound_dict)

“字典里还有字典,层层嵌套的秘密。”


高级篇:进阶技巧与应用

第十三站:列表内字典的处理

案例13:转换列表为字典列表

想象你有一个列表,每个元素都是包含名字和年龄的列表,你想转换成字典列表。


1
people_info&nbsp;=&nbsp;&#091;&#091;"Alice",&nbsp;28],&nbsp;&#091;"Bob",&nbsp;30]]<br>people_dicts&nbsp;=&nbsp;&#091;{name:&nbsp;age}&nbsp;for&nbsp;name,&nbsp;age&nbsp;in&nbsp;people_info]<br>print(people_dicts)

这里,我们循环遍历列表,将每个子列表转换成一个字典,并添加到新的列表中。

第十四站:字典的深度操作

案例14:扁平化嵌套字典

有时你需要处理嵌套字典,比如将所有顶层键值对提取出来。


1
nested_dict&nbsp;=&nbsp;{'a':&nbsp;{'x':&nbsp;1},&nbsp;'b':&nbsp;{'y':&nbsp;2,&nbsp;'z':&nbsp;3}}<br>flat_dict&nbsp;=&nbsp;{k:&nbsp;v&nbsp;for&nbsp;nested_key&nbsp;in&nbsp;nested_dict&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;nested_dict&#091;nested_key].items()}<br>print(flat_dict)

这段代码通过两层循环,遍历了嵌套字典的所有第一层键值对。

第十五站:结合函数与推导式

案例15:使用函数增强表达

利用函数来增强字典推导式的功能,比如计算平方。


1
nums&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3,&nbsp;4]<br>square_dict&nbsp;=&nbsp;{num:&nbsp;(lambda&nbsp;x:&nbsp;x*x)(num)&nbsp;for&nbsp;num&nbsp;in&nbsp;nums}<br><em>#&nbsp;或更简洁地使用&nbsp;pow&nbsp;函数</em><br>square_dict&nbsp;=&nbsp;{num:&nbsp;pow(num,&nbsp;2)&nbsp;for&nbsp;num&nbsp;in&nbsp;nums}<br>print(square_dict)

这里展示了如何在字典推导式中直接调用函数,增加表达的灵活性。

第十六站:元组与字典推导的结合

案例16:基于元组的映射

如果你有一个元组列表,每个元组代表键值对,可以用推导式快速转换。


1
pairs&nbsp;=&nbsp;&#091;('name',&nbsp;'Alice'),&nbsp;('age',&nbsp;28)]<br>mapping&nbsp;=&nbsp;dict(pairs)<br>print(mapping)

虽然不是传统意义上的字典推导,但使用

1
dict()

直接转换元组列表也是一种简洁的方法。

第十七站:动态属性设置

案例17:对象属性到字典

如果你想要将类的实例属性转化为字典,可以这样做:


1
class&nbsp;Person:<br>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;name,&nbsp;age):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name&nbsp;=&nbsp;name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.age&nbsp;=&nbsp;age<br><br>person&nbsp;=&nbsp;Person('Alice',&nbsp;28)<br>person_dict&nbsp;=&nbsp;{attr:&nbsp;getattr(person,&nbsp;attr)&nbsp;for&nbsp;attr&nbsp;in&nbsp;dir(person)&nbsp;if&nbsp;not&nbsp;attr.startswith("__")}<br>print(person_dict)

这段代码通过遍历实例的所有属性并排除特殊方法,展示了如何将对象属性转化为字典。

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

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

2024-4-14 20:59:36

安全运维

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

2025-2-11 17:15:56

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