python中dict用法

dict基本使用

以一个例子开始:统计一个列表里各单词重复次数

1
2
3
4
words = ['hello', 'world', 'nice', 'world']
counter = dict()
for kw in words:
counter[kw] += 1

这样写肯定会报错的,因为各词的个数都没有初始值,引发KeyError

第二种方式

1
2
3
4
5
6
7
8
9
10
11
word=["hello","world","my","friend","my"]
result=dict()
for key in word:
if key in result.keys():
value = result.get(key)+1
else:
value=1
result[key]=value

for key,value in result.items():
print("key is {},value is {}".format(key,value))

使用setdefault()方法设置默认值

1
2
3
4
5
word=["hello","world","my","friend","my"]
result=dict()
for key in word:
result.setdefault(key,0)
result[key] +=1

setdefault(),需提供两个参数,第一个参数是键值,第二个参数是默认值,每次调用都有一个返回值,如果字典中不存在该键则返回默认值,如果存在该键则返回该值,利用返回值可再次修改代码。

1
2
3
4
5
word=["hello","world","my","friend","my"]
result=dict()
for key in word:

result[key] = result.setdefault(key,0) +1

如何使用defaultdict

defaultdict接受一个工厂函数作为参数,如下来构造:

1
dict =defaultdict( factory_function)

这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()

[]

1
2
3
4
5
6
7
8
9
10
11
>>> from collections import defaultdict
>>> def zero():
... return 0
...
>>> dd = defaultdict(zero)
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {})
>>> dd['foo']
0
>>> dd
defaultdict(<function zero at 0xb7ed2684>, {'foo': 0})

最终代码:

1
2
3
4
5
6
from collections import defaultdict
words = ['hello', 'world', 'nice', 'world']
#使用lambda来定义简单的函数
counter = defaultdict(lambda: 0)
for kw in words:
counter[kw] += 1

dict其他函数

1
2
3
4
seq = ('Google', 'Runoob', 'Taobao')

dict = dict.fromkeys(seq)
print "新字典为 : %s" % str(dict)
1
2
3
4
l1=["a","b","c"]
l2=[1,2,3]
d1=dict(zip(l1,l2))
print(d1)
1
2
3
4
5
dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }

dict.update(dict2)
print "Value : %s" % dict