- Python算法详解
- 张玲玲
- 497字
- 2020-06-27 17:50:51
2.3.8 使用字典推导式
在Python程序中,字典推导和本章前面讲解的列表推导的用法类似,只是将列表中的中括号修改为字典中的大括号而已。下面的实例文件zitui.py演示了使用字典推导式实现合并大小写key的过程。
源码路径:daima\第2章\zitui.py
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} mcase_frequency = { k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys() if k.lower() in ['a','b'] } print (mcase_frequency)
执行上述代码后会输出:
{'a': 17, 'b': 34}
再看下面的实例文件ti.py,功能是快速更换字典中key和value的值。
源码路径:daima\第2章\ti.py
mcase = {'a': 10, 'b': 34} mcase_frequency = {v: k for k, v in mcase.items()} print(mcase_frequency)
执行上述代码后会输出:
{10: 'a', 34: 'b'}
再看下面的实例文件tiqu.py,功能是使用字典推导式从字典中提取子集。
源码路径:daima\第2章\tiqu.py
prices = {'ASP.NET': 49.9, 'Python': 69.9, 'Java': 59.9, 'C语言': 45.9, 'PHP': 79.9} ①p1 = {key: value for key, value in prices.items() if value > 50} print(p1) tech_names = {'Python', 'Java', 'C语言'} ②p2 = {key: value for key, value in prices.items() if key in tech_names} print(p2) p3 = dict((key, value) for key, value in prices.items() if value > 50) # 慢 print(p3) tech_names = {'Python', 'Java', 'C语言'} p4 = {key: prices[key] for key in prices.keys() if key in tech_names} # 慢 print(p4)
在Python程序中,虽然大部分可以用字典推导式解决的问题,也可以通过创建元组序列,然后将它们传给dict()函数来完成,例如①中的做法。但是使用字典推导式的方案更加清晰,而且实际运行起来也要快很多,以②中的字典prices进行测试,效率要提高两倍左右。执行上述代码后会输出:
{'Python': 69.9, 'Java': 59.9, 'PHP': 79.9} {'Python': 69.9, 'Java': 59.9, 'C语言': 45.9} {'Python': 69.9, 'Java': 59.9, 'PHP': 79.9} {'Python': 69.9, 'Java': 59.9, 'C语言': 45.9}