py 高效使用字典

1、用 in 关键字检查 key 是否存在

bad

 d = {'name': 'python'}

if d.has_key('name'):
    pass

good

if 'name' in d:
    pass

2、用 get 获取字典中的值

bad

d = {'name': 'python'}
if 'name' in d:
    print(d['hello'])
else:
    print('default')

good

print(d.get("name", "default"))

3、用 setdefault 为字典中不存在的 key 设置缺省值

data = [
        ("animal", "bear"),
        ("animal", "duck"),
        ("plant", "cactus"),
        ("vehicle", "speed boat"),
        ("vehicle", "school bus")
    ]

bad

for (key, value) in data:
    if key in groups:
        groups[key].append(value)
    else:
        groups[key] = [value]

good

groups = {}
for (key, value) in data:
    groups.setdefault(key, []).append(value)
setdefault 的作用是:

4、用 defaultdict 初始化字典对象

from collections import defaultdict

groups = defaultdict(list)
for (key, value) in data:
    groups[key].append(value)

当 key 不存在于字典中时,list 函数将被调用并返回一个空列表赋值给 d[key],这样一来,你就不用担心调用 d[k] 会报错了。

5、用 fromkeys 将列表转换成字典

value = []
d = dict.fromkeys(keys, value)
print(d)

6、用字典实现 switch ... case 语句
Python 中没有 switch ... case 语句,这个问题Python之父龟叔表示这个语法过去没有,现在没有,以后也不会有。因为Python简洁的语法完全可以用 if ... elif 实现。如果有太多的分支判断,还可以使用字典来代替。

if arg == 0:
    return 'zero'
elif arg == 1:
    return 'one'
elif arg == 2:
    return "two"
else:
    return "nothing"
good

data = {
    0: "zero",
    1: "one",
    2: "two",
}
data.get(arg, "nothing")

7、使用 iteritems 迭代字典中的元素
python提供了几种方式迭代字典中的元素,第一种是使用 items 方法:

d = {
    0: "zero",
    1: "one",
    2: "two",
}

for k, v in d.items():
    print(k, v)

items 方法返回的是(key ,value)组成的列表对象,这种方式的弊端是迭代超大字典的时候,内存瞬间会扩大两倍,因为列表对象会一次性把所有元素加载到内存,更好的方式是使用 iteritems

for k, v in d.iteritems():
    print(k, v)

iteritems 返回的是迭代器对象,迭代器对象具有惰性加载的特性,只有真正需要的时候才生成值,这种方式在迭代过程中不需要额外的内存来装载这些数据。注意 Python3 中,只有 items 方法了,它等价于 Python2 中的 iteritems,而 iteritems 这个方法名被移除了。

8、使用字典推导式
推导式是个绝妙的东西,列表推导式一出,map、filter等函数黯然失色,自 Python2.7以后的版本,此特性扩展到了字典和集合身上,构建字典对象无需调用 dict 方法。

bad

numbers = [1,2,3]
d = dict([(number,number*2) for number in numbers])

good

numbers = [1, 2, 3]
d = {number: number * 2 for number in numbers}

你可能感兴趣的:(py 高效使用字典)