位置: 编程技术 - 正文

Python进阶篇之字典操作总结(python 字符)

编辑:rootadmin

推荐整理分享Python进阶篇之字典操作总结(python 字符),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python字号,python 字符,python 字符,python 字符,python怎么写字,python文字教程,python 字符,python文字教程,内容如对您有帮助,希望把文章链接给更多的朋友!

一、与字典值有关的计算

问题

想对字典的值进行相关计算,例如找出字典里对应值最大(最小)的项。

解决方案一:

假设要从字典 {'a':3, 'b':2, 'c':6} 中找出值最小的项,可以这样做:

值得注意的是 d.values() 获取字典的全部值,d.keys() 获取字典的全部键,而且两个序列的顺序依然保持一一对应的关系。因此 zip(d.values() , d.keys()) 实质上生成的是一个 (value, key) 的序列。min 函数通过比较序列中的元组 (value, key) 找出其最小值。

解决方案二:

除了使用 zip(d.values() , d.keys()) 外,还可以使用 dict.items() 方法和生成器推导式来生成 (value, key) 序列,从而传递给 min 函数进行比较:

这里 min 函数的参数 (v ,k) for (k, v) in d.items() 其实是一个生成器推导式(和列表推导式一样,只是把列表推导式的 [] 改为 () ,而且其返回的一个生成器而非列表),由于生成器推导式做为 min 函数的参数,所以可以省略掉两边的括号(不做为参数时写法应该是 ((v ,k) for (k, v) in d.items()) ) 。

二、字典推导式

问题

想把一个元组列表转换成一个字典,例如把 [('a', 1), ('b', 2), ('c', 3)] 转化为 {'a': 1, 'b': 2, 'c': 3}

解决方案

类似于列表推导式,字典推导式可以方便地从其他数据结构构造字典,例如:

字典推导式的规则和列表推导式一样,只是把 [] 换成 {}

三、寻找字典的交集

问题

假设有两个字典:

要找出这两个字典中具有公共键的项,即要得到结果 {'b':2, 'c':3}

解决方案

我们知道一般通过 d.items() 方法来遍历字典,d.items() 方法返回的对象是一个类集合对象,支持集合的基本运算,如取交集、并集等。

此外,d.keys() 返回字典的键,也是一个类集合对象,如果我们只想找出两个字典中键相同的项,可以这样:

这里如果相同的键对应不同的值则去第一个字典中的值。推广开来,如果想排除掉字典中的某些键,可以这样:

但有一点需要注意的是,d.values() 返回字典的值,由于字典对应的值不一定唯一,所以 d.values() 一般无法构成一个集合,因此也就不支持一般的集合操作。

Python进阶篇之字典操作总结(python 字符)

四、多个字典连接成一个字典

问题

有多个字典,例如:

想将这多个字典连接为一个字典,或一次性对多个字典进行迭代操作。

解决方案

使用 collections.ChainMap :

ChainMap 将传入的多个字典连接为一个字典,并返回一个 ChainMap 对象,这个对象的行为就像一个单一的字典,我们可以对其进行取值或者迭代等操作。注意到这里键 c 对应的值为 3,如果传入 ChainMap 的字典含有相同的键,则对应的值为先传入的字典中的值。

此外,如果你只想单纯地迭代字典的键值对,可以结合使用 items() 和 itertools.chain() 方法:

这里相同的键会被分别迭代出来。

五、保持字典有序

问题

想让字典中元素的迭代顺序和其加入字典的顺序保持一致

解决方案

通常来说,使用 d.items() 或者 d.keys() 、d.values() 方法迭代出来的元素顺序是无法预料的。例如对字典 d = {'a':1, 'b':2, 'c':3} 迭代:

每一次运行结果都可能不同。如果想让元素迭代的顺序和创建字典时元素的顺序一致,就要使用 collections.OrderedDict 代替普通的 dict :

OrderedDict 实际通过维护一个双向链表来记录元素添加的顺序,因此其耗费的内存大约为普通字典的两倍。所以在实际使用中需综合考虑各种因素来决定是否使用 OrderedDict 。

六、使字典的键映射多个值

问题

通常情况下字典的键只对应一个值。现在想让一个键对应多个值。

解决方案

为了使一个键对应多个值,首先需要把多个值放到一个容器中(例如列表或者集合等)。例如有这样一个列表: [('a', 1), ('a', 2), ('b', 3), ('b', 4), ('c', 5)] ,我们要将其转换成一个字典,保持元素的键值对应关系,通常我们会写这样的代码:

但是 if else 语句让代码显得有点冗余和不易读,Python 的 defaultdict 改善上述代码。

if else 的判语句没有了。

defaultdict 是 dict 的一个子类。对 dict 来说,如果 key 不存在,则 dict[key] 取值操作会抛出 KeyError 异常,但是 defaultdict 则会返回一个传入 defaultdict 构造器的类的实例(例如一个列表)或者自定义的缺失值。因此在上例中,对于 d[k].append(v) ,当 k 不存在时,则会先执行 d[k] = [] 并返回这个空列表,继而将 v 加入到列表中。

传入 defualtdict 构造器的值不一定要是一个类,也可以是一个可调用的函数,当相应的键不在 defualtdict 中时,其默认的值就为这个函数的返回值,例如:

利用这样一个特性,我们可以构造无限深度的字典结构:

这里当执行 d['a'] 时,由于相应的键不存在,故返回一个 defaultdict(tree) ,当再执行 d['a']['b'] = 1 时,将键 b 对应的值设为 1 。

总结

标签: python 字符

本文链接地址:https://www.jiuchutong.com/biancheng/383475.html 转载请保留说明!

上一篇:Python极简代码实现杨辉三角示例代码(python极简讲义pdf)

下一篇:Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)

  • 免交增值税怎么账务处理
  • 减资需要交个税吗
  • 仓库盘亏怎么处理
  • 公司两年账没做
  • 不动产什么时候可以抵扣进项税额
  • 企业租给企业房产税税率
  • 收到捐赠货物的会计分录怎么写
  • 出纳人员怎么核酸检测
  • 长期待摊费用可以转入费用或者成本吗
  • 预付货款核销如何做会计摘要呢?
  • 定额材料损耗率国家标准
  • 计提税费怎么写分录
  • 二手车公司销售二手车的税率
  • 企业接到银行通知,借入长期借款的应付利息为15000
  • 代收车船税没有发票能走帐吗
  • 小规模公司没有进项票 开票需要交什么税
  • 建筑企业在增值税方面新出台的政策
  • 保安服务费可以计入劳务费吗
  • 营改增后如何确认老项目营改增前收入
  • 主办会计和会计助理的区别
  • 加计抵减10%会计分录用营业外收入还是其他业务收入
  • 企业所得税佣金扣除规定
  • 电商企业如何确定产品结构
  • 营改增后不动产发票样本
  • 一次性收取的租金怎么纳税
  • 计提员工社保拿什么做原始凭证?
  • 路由器怎么重置网络
  • 黄金入账怎么做会计分录
  • 怎么安装Win7系统
  • php面向对象是什么意思
  • 专项维修基金会产生利息吗
  • 销售货物是什么意思
  • 银行存放同业的钱安全吗
  • php公众号推送完整示例
  • 工地事故赔付
  • 减免税款账务处理
  • 开发票为什么要对公账户?
  • php如何上传1个g以上的文件
  • 计算机视觉姿势评估英语
  • vue keep-alive实现原理
  • 语音识别的正确流程
  • 帝国cms为什么安装不了
  • 账户验证是什么意思
  • 增值税纳税申报表怎么填
  • 管家婆系统能否查询上月库存明细
  • 织梦是啥
  • 管理费用二级科目明细可以自己设置吗
  • 增值税退税流程怎么操作
  • 服务费发票需要交印花税吗
  • 中华人民共和国企业所得税年度纳税申报表
  • 子公司注销时的账务处理
  • ubuntu20.04vim
  • 采购材料单表格
  • 业务招待费的进项票可以抵扣吗
  • 会计调转回去还要继续教育吗
  • 盘亏的设备要进仓库吗
  • 在途物资属于会计科目吗
  • 上年度记错科目怎么调整
  • 流动性比率过小什么意思
  • 营业成本增加额公式
  • 应收票据及应收账款怎么算
  • 缴纳工会经费的依据
  • 委托方和受委托方的法律关系
  • 工程公司本月没发工资
  • 会计凭证装订后应当加贴封条
  • 税种工会经费
  • 房地产开发企业建造的商品房,在出售前
  • 商业会计的任务有哪些
  • 2008sql附加数据库
  • linux内核构成
  • Windows Server 2003服务器安全设置
  • 为什么windows删除文件很慢
  • netfilter/iptables模块编译及应用
  • 返回场景和音乐的区别
  • Eclipse和AndroidStudio常用快捷键对比
  • js层级选择器
  • js框架开发实例
  • 成都高新区税务局办税服务厅电话
  • 百旺税控客服电话
  • 该纳税人还未申报,请申报成功后
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设