转自:https://mp.weixin.qq.com/s/DFF8sRSW7W4nqB6mmLr2jQ

从题目引出

data = [("p", 1), ("p", 2), ("p", 3),("h", 1), ("h", 2), ("h", 3)]
要转换成
result = {'p': [1, 2, 3], 'h': [1, 2, 3]}

一般都会用的方法:

data = [("p", 1), ("p", 2), ("p", 3),("h", 1), ("h", 2), ("h", 3)]
result = {}
for (key, value) in data:if key not in result:result[key] = []result[key].append(value)

setdefault
setdefault是字典对象的一个实例方法,接收两个参数,用法和字典的get方法类似,但是比 get 更强大。 它可以为给字典的key设定一个默认值(如果key不在字典中的时候)
get 方法设置的默认值不会改变原字典, 而setdefault设置的默认值会改变原字典的值。

>>> d = {"x":3}
>>> y = d.get("y", 4)
>>> y
4
>>> d
{'x': 3}

对比

>>> y = d.setdefault("y", 4)
>>> y
4
>>> d
{'y': 4, 'x': 3}

所以,可以更加优雅的写为:

result = {}
data = [("p", 1), ("p", 2), ("p", 3),("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:result.setdefault(key, []).append(value)

defaultdict
defaultdict是属于collections 模块下的一个工厂函数,用于构建字典对象,接收一个函数(可调用)对象为作为参数。参数返回的类型是什么,key对应value就是什么类型。

>>> result = defaultdict(list)
>>> result
defaultdict(<type 'list'>, {})
>>> result['a']
[]

参数为 list,它就会构建一个默认value为list的字典,例如result[‘a’]的值默认就是list对象。
因此,前面这段代码可以改为:

from collections import defaultdict
result = defaultdict(list)
data = [("p", 1), ("p", 2), ("p", 3),("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:result[key].append(value)

python技巧(setdefault 与 defaultdict)相关推荐

  1. python之setdefault()和defaultdict()处理缺失值的键

    代码经过自己的注释, 其实defaultdict()就是给有key的"key-value对"添加默认的value # -*- coding: utf-8 -*- import sy ...

  2. 程序员必知的20个Python技巧

    作者 | Duomly 译者 | 弯月,编辑 | 郭芮 出品 | CSDN(ID:CSDNnews) Python是一门流行且应用广泛的通用编程语言,其应用包括数据科学.机器学习.科学计算等领域,以及 ...

  3. 你需要知道的20个常用的Python技巧

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 Python的可读性和简单性是其广受 ...

  4. python setdefault,Python笔记setdefault用法

    Python字典中setdefault的用法: Python 字典 setdefault() 方法和get()方法类似,返回指定键的值,如果键不在字典中,将会添加键并将值设置为一个指定值,默认为Non ...

  5. python%20语言 20培训_Python语言学习之20个值得学习的Python技巧

    点击蓝字获取更多精彩信息 1.字符串反转 使用切片反转字符串. str1="qwert"   rev_str1=str1[::-1]   #输出    # trewq 2.使首字母 ...

  6. 【python技巧】“”、“”等符号操作

    [python技巧] 1)[关于'&' :按照二进制进行与操作,可以用作判断奇偶][https://zhidao.baidu.com/question/308587899.html] & ...

  7. 离散度计算公式 python_被多种离散化场景困扰?8种python技巧!让数据处理更简单...

    前言 python数据处理与分析学习过程中,需要有这样的一种意识,即元"为什么选择了python而不是其他?"既然选择了python,那么在实际应用中,它到底哪里不一样?大家说的方 ...

  8. python大型项目经验_经验丰富程序员才知道的8种高级Python技巧

    全文共2330字,预计学习时长11分钟 图源:unsplash 本文将介绍8个简洁的Python技巧,若非经验十足的程序员,你肯定有些从未见过.向着更简洁更高效,出发吧! 1.通过多个键值将对象进行排 ...

  9. python生成uuid_咸鱼高赞回答:有什么相见恨晚的Python技巧,附赠python最新教程...

    日常工作几乎离不python.一路走来,他积累了不少有用的技巧和tips,现在就将这些技巧分享给大家.这些技巧将根据其首字母按A-Z的顺序进行展示. Python相关学习资料获取方式:转发文章+关注私 ...

  10. python初学者_面向初学者的20种重要的Python技巧

    python初学者 Python is among the most widely used market programming languages in the world. This is be ...

最新文章

  1. 使用metablog迁移博客园的文章
  2. 第三章 线性代数回顾-机器学习老师板书-斯坦福吴恩达教授
  3. Detection and Classification of Acoustic Scenes and Events(DCASE2013详细介绍)
  4. openstack架构详解图_英特尔顶级技术专家合力缔造精品:Linux开源网络全栈详解...
  5. windows7计算机用户账户,win7系统删除用户账户的方法(图文)
  6. 机器人码垛搬运编程程序_一条指令搞定机器人搬运程序
  7. 浏览器滚动条默认样式改变
  8. sql server中replace()函数,可用于字符串替换
  9. Arduino UNO驱动DS1307数字实时时钟RTC
  10. <C++>多继承以及典型的菱形继承案例
  11. 【解决方案】雷电模拟器去桌面底部游戏和游戏中心
  12. 简单讲解前序遍历,中序遍历,后序遍历和层次遍历
  13. node爬取网易云歌曲
  14. Java开发岗位面试题归类---怎么好好的准备面试,也算是发展学习方向
  15. 北航学长的NLP赛事教程!
  16. Codeforces Round #655 (Div. 2)
  17. 计算机科学与技术高等数学答案,计算机科学与技术本科-入学测试高等数学测试题(第1套)...
  18. 三种方法解决动态换IP需求
  19. GIS实验之通过邻域(距离最近)方法划分区域
  20. 如何在html 插入背景音乐,HTML插入背景音乐方法【全】

热门文章

  1. Java用CMD打开指定文件和文件夹
  2. 前端笔记03——HTML元素
  3. 一种基于PC端微信公众号的高效采集监测方法
  4. DTOJ #5328 找苹果
  5. 新闻网站爬虫及爬取结果的查询网站
  6. 进程控制块的组织方式及其优缺点?
  7. Flutter Interact 的 Flutter 1.12 大进化和回顾
  8. C/C++中的getenv()函数
  9. JAVA:通过session 获取userid
  10. 李笑来python自学_李笑来登顶 GitHub TOP 榜!币圈大佬要教程序员如何自学编程