当前位置: 首页 > news >正文

Python Cookbook-4.11 在无须过多援引的情况下创建字典

任务

在无须过多援引的情况下创建字典。

解决方案

当你逐渐习惯了 Python,会发现自己已经创建了大量的字典。当键是标识符时,可以用 dict 加上命名的参数来避免援引它们:

data = dict(red = 1, green = 2, blue = 3)

这看上去比直接用字典形式的语法要整洁一些

data = {'red':1, 'green':2, 'blue':3}

讨论

一种创建字典的好方法是调用内建的 dict 类型,但有时用带有花括号和冒号的字典形式也不错。本节的代码说明,如果键都是文字的字符串并且在语法上对用户而言也是有效且适合作为标识符的,则通过调用 dict,无须援引字典的键。不能对像“12ba”和“for”一样的字符串应用此法,因为“12ba”以数字开头,而 for 正好是 Python 关键字不能作为标识符。

字典形式的语法是 Python 中唯一需要用到花括号的地方:如果不喜欢花括号,或者正好所用的键盘不太容易打出花括号(所有的意大利布局的键盘都这样),那么可以用dict()而不是{}来创建一个空字典。

调用 dict 还能给你带来一些其他额外的好处。dict(d)返回一个完全独立于原字典d的拷贝,就像 d.copy()一样。但当d不是一个字典,而是一个数对(key,value)的序列时,dict(d)仍然有效(如果 key在序列中出现多次,那么只有最后一次出现的 key 会被计入)。般创建字典的操作大概是这样:

d = dict(zip(the_keys,the_values))

the_key 是键的序列,the_values 则是键的对应值的序列。内建的 zip 函数创建并返回一个数对(key,value)构成的列表,内建类型 dict 接受这个列表作为参数并创建相应的字典。如果序列非常长,那么用Python 标准库中的itertoos模块能有效地提高速度:

import itertools
d = dict(itertools.izip(the_keys,the_values))

内建函数 zip 会在内存中创建出包含所有数对的列表,而 itertools.izip 一次只生成一对数据。在一些计算机上,对于长度为10000的序列,后面这种方式可以快两倍左右——Python2.3中是18ms对45ms,Python2.4中则是17ms对32ms。

还可以在 dict 调用中使用基于位置的参数和命名参数(如果命名的参数正好和基于位置的参数冲突,则前者生效)。举个例子,下面是一个字典的创建,其中用到了前面提到的 Python 关键字和另一个不宜做命名参数的键名:

d = dict({'12ba':49, 'for':23),rof = 41, fro = 97, orf = 42)

如果想创建一个字典,其中每个键都对应相同的值,只需调用dict.fromkeys(keysequence,value)(如果你忽略了value,它默认使用None)即可。下面给个例子,用很清爽的方式初始化一个字典,并用它来统计不同的小写ASCI字母的出现次数:

import string
count_by_letter = dict.fromkeys(string.ascii_lowercase, 0)

相关文章:

  • CICDDevOps概述
  • PID参数整定:从“炼丹术士“到“系统调音师“的进化指南
  • SVN忽略不必提交的文件夹和文件方法
  • 网络基础(二)
  • 一文解读DeepSeek在法律商业仲裁细分行业的应用
  • 麒麟Win32运行环境
  • 【蓝桥杯速成】| 10.回溯切割
  • Spring Boot(十七):集成和使用Redis
  • 【正点原子】AI人工智能深度学习(RV1126/RK3568/RK3588)-第1期 准备篇
  • 【Android】VehiclePropertyAccess引起CarService崩溃
  • AI比人脑更强,因为被植入思维模型【21】冯诺依曼思维模型
  • HarmonyOS Next~鸿蒙图形开发技术解析:AREngine与ArkGraphics 2D的核心能力与应用实践
  • 雷电模拟器启动94%卡住不动解决方案
  • 谷歌Gemini代码助手免费版解析:技术革新与用户隐私的权衡
  • Tomcat中间件漏洞攻略
  • 2. AVL树
  • 查询、插入、更新、删除数据的SQL语句(SQLite)
  • Ceph集群部署步骤
  • Python---数据分析(Pandas十一:二维数组DataFrame统计计算二)
  • 《AI大模型趣味实战 》第8集:多端适配 个人新闻头条 基于大模型和RSS聚合打造个人新闻电台(Flask WEB版) 2
  • 华为鸿蒙电脑正式亮相,应用生态系统能否挑战Windows?
  • 丰田汽车:美国关税或导致4、5月损失1800亿日元,新财年净利润下滑三成
  • 绍兴柯桥:用一块布托起中国制造的新经纬
  • 以军总参谋长:已进入“决定性打击计划的第二阶段”
  • 国家发改委副主任谈民营经济促进法:以法治的稳定性增强发展的确定性
  • 不主动上门检查,上海已制定14个细分领域“企业白名单”甄别规则