python--字典初始化
来源:互联网 发布:java注释快捷键 编辑:程序博客网 时间:2024/05/03 14:59
如果说deque是加强版的list的话,那加强版的字典又是什么的呢?没错,就是今天学习的defaultdict,它与deque一样,都是在collections库中的模块。
先来看这样一个问题:
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]对于这样一个元组列表,如果我们想要将它转化为字典,该如何操作呢?我们很容易想到这样的操作:
d={}s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]for i,j in s: d[i]=j
print一下,结果是什么呢?
{'Susan': 4, 'Jone': 2, 'Tom': 1}
这并不是我们期待的结果。在这个例子中,字典中‘Tom’键对应了三个值,我们希望这三个值以列表得形式储存。可以对代码进行一些修改:
k={}s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]for i,j in s: if i not in k.keys():#注意不能写成 if not k[i],因为其返回值不是None,而是error l=[] l.append(j) k[i]=l else: k[i].append(j)print(k)结果如下:
{'Susan': [4], 'Jone': [2], 'Tom': [5, 4, 1]}
当然,更加pythonic的写法是下面这样,这需要用到我们今天学习的defaultdict。
from collections import defaultdictd=defaultdict(list)s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]for i,j in s: d[i].append(j)print(list(d.items()))
通过:
d=defaultdict(list)
我们创建了一个默认值为列表的字典,此时无论键是否存在,其返回值均是一个列表。
>>> d=defaultdict(list)>>> d[1][]
我们看到,此时键[1]不存在,但并没有抛出错误,而是返回一个空列表。
当然,我们也可以让默认值为set,int,etc。我们可以把之前实现的方法改动一下,将列表换为集合:
from collections import defaultdictd=defaultdict(set)s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]for i,j in s: d[i].add(j)print(list(d.items()))结果如下:
[('Susan', {4}), ('Jone', {2}), ('Tom', {1, 4, 5})]如果默认值是int,键不存在时,返回值默认为0。
>>> d=defaultdict(int)>>> d[1]0>>> d[3]0
0 0
- python--字典初始化
- Python中使用defaultdict初始化字典以及应用
- ssm 框架初始化 字典
- Python 字典
- python 字典
- Python:字典
- Python 字典
- python字典
- Python 字典
- python 字典
- python 字典
- Python 字典
- Python字典
- python 字典
- python字典
- python 字典
- python 字典
- python--字典
- 【LeetCode】219Contains Duplicate II
- samba NT_STATUS_HOST_UNREACHABLE 错误提示
- 如何利用decorators.xml排除WEB-INF目录下的某些页面
- 使用JMeter对Tomcat进行压力测试与Tomcat性能调优
- HDU 1030 数塔找最短路 (找规律)
- python--字典初始化
- Android-多点触控的实现示例详解
- 悬浮窗口的基本原理(使用WindowManager添加View)
- mysql limit后的注入
- 内存泄露从入门到精通三部曲之常见原因与用户实践
- 给思想迷途人的文章
- iOS CJKeyBoardBarTextField_键盘遮挡处理
- 内存共享机制
- flipOver翻页效果