字典
dict().get()
1. dict()get()函数利用键来获取值
常见的获取键值的方法如下,
print(dict[key])
当字典中不存在该键时会返回KeyError类型错误,此时就可以用get()函数还利用键获取值
print(dict.get(key))
利用get()函数操作时当字典中不存在输入的键时会返回一个None,这样程序运行时就不会出异常
2. 利用字典统计列表中元素出现次数
统计列表中部分元素出现的次数,如列表为
ls=['aa','b','c','ddd','aa']
统计列表中每个元素出现次数:
dic={} #创建一个空字典
for i in ls:
dic[i]=dic.get(i,0)+1 #之后称其为get的赋值语句,目的是新建字典键值对
print(dic)
输出结果:
{'aa': 2, 'b': 1, 'c': 1, 'ddd': 1}
dict.get(i,x)函数在这里有两个参数,第一个i是确定要分配值的键,第二个x是拟定给键分配一个初值
# 赋值语句dic[i]=dic.get(i,0)+1效果等同于
if not dic[i]:
dic[i]=0
dic[i]=dic[i]+1
例子
ls=['aa','b','c','d','aa']
dic={} #创建一个空字典
for i in ls:
dic[i]=dic.get(i,0)+1 #功能逻辑看下方阐述
print(dic)
# >>>{'aa': 2, 'b': 1, 'c': 1, 'd': 1}
dic['aa']=dic.get('aa',10) #功能同前一条代码执行到第二次时的
print(dic)
# >>>{'aa': 2, 'b': 1, 'c': 1, 'd': 1}
字典遍历方法
(1)遍历key值
a={'a': '1', 'b': '2', 'c': '3'}
for key in a:
print(key+':'+a[key])
结果
a:1
b:2
c:3
在使用上,for key in a和 for key in a.keys():完全等价。
(2)遍历value值
for value in a.values():
print(value)
# 结果
# 1
# 2
# 3
(3)遍历字典项
for kv in a.items():
print(kv)
# 结果
('a', '1')
('b', '2')
('c', '3')
(4)遍历字典健值
for key,value in a.items():
print(key+':'+value)
结果
a:1
b:2
c:3
python中defaultdict用法详解
认识defaultdict:
当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错.
这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,下面会说
如何使用defaultdict
defaultdict接受一个工厂函数作为参数,如下来构造:
dict =defaultdict( factory_function)
这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:
from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] ='two'
print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])
输出:
0
set()
[]
字典的浅复制
与列表的复制(列表的一些操作#列表的复制)相似
在Python中,字典的浅复制可以通过以下几种方法实现:
- copy()方法
import copy
dict1 = {'a':1, 'b':2}
dict2 = copy.copy(dict1)
- 利用字典解析
dict1 = {'a':1, 'b':2}
dict2 = {k:v for k,v in dict1.items()}
- dict()构造方法
dict1 = {'a':1, 'b':2}
dict2 = dict(dict1)
浅复制会构造一个新字典,但字典中的元素仍然是原字典中的元素的引用。也就是说,对于可变类型如列表,修改其中一个字典会影响到另一个字典。而不可变类型如字符串、整数,则不会有这样的影响。所以Python中的字典浅复制就是复制字典本身,但其包含的元素仍是原元素的引用。