字典

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中,字典的浅复制可以通过以下几种方法实现:

  1. copy()方法
import copy
dict1 = {'a':1, 'b':2}
dict2 = copy.copy(dict1)
  1. 利用字典解析
dict1 = {'a':1, 'b':2}
dict2 = {k:v for k,v in dict1.items()}
  1. dict()构造方法
dict1 = {'a':1, 'b':2}
dict2 = dict(dict1)

浅复制会构造一个新字典,但字典中的元素仍然是原字典中的元素的引用。也就是说,对于可变类型如列表,修改其中一个字典会影响到另一个字典。而不可变类型如字符串、整数,则不会有这样的影响。所以Python中的字典浅复制就是复制字典本身,但其包含的元素仍是原元素的引用。