在python当中,字典是主要的数据结构。下面通过一些列子介绍一下字典的使用技巧
1.使用异常处理或者get()来处理KeyError问题
定义一个字典nbaplayer,key为name,value为球衣号码;定义一个函数,通过球员名字获取球员球衣号码。
nbaplayer={
'Harden':13,
'Kobe':24,
'James':23,
'Curry':30,
}
def getNumber(name):
return name+"'s number is "+str(nbaplayer[name])
调用函数时,发现当输入字典内未定义的Key时,输出结果报错KeyError:‘Bob’。很显然,这种报错是我们在程序中不想见到的。
print getNumber('Harden')
print getNumber('Bob')
Result:
Harden's number is 13
Traceback (most recent call last):
File "D:/pyCharmCode/DemoTeat/Chapter5.py", line 54, in
print getNumber('Bob')
File "D:/pyCharmCode/DemoTeat/Chapter5.py", line 51, in getNumber
return name+"'s number is "+str(nbaplayer[name])
KeyError: 'Bob'
解决技巧1,通过Exception处理:
def getNumber(name):
try:
return name+"'s number is "+str(nbaplayer[name])
except KeyError:
return 'No a player called %s' %name
解决技巧2,通过get()方法:
def getNumber(name):
#get(key,default=None)
return name+"'s number is "+str(nbaplayer.get(name,"None"))
print getNumber('Harden')
print getNumber('Bob')
result:
Harden's number is 13
Bob's number is None
2.对字典进行排序
通过sorted()方法对字典进行排序:
dict={'a': 4, 'c': 2, 'b': 3, 'd': 1}
print sorted(dict.items())
result:
[('a', 4), ('b', 3), ('c', 2), ('d', 1)]
通过结果可以发现,此方法是根据key的顺序来重新排序的,如果想要通过value来排序,可以通过以下方式:
print sorted(dict.items(),key=lambda x:x[1])
result:
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
3.通过字典模拟switch/case语句
python中没有switch/case声明,如果条件过多时,使用If..else代码会及其不整洁。这里我们可以使用字典来完成switch/case
操作。具体形式如下:
func_dict = {
... 'cond_a': handle_a,
... 'cond_b': handle_b,
... }
cond = 'cond_a'
func_dict[cond]()
考虑到switch/case存在default的情况,这里可以通过技巧1介绍的get()方法来等价。
字典模拟switch/case语句具体事例如下(简单计算器):
def calculator_dict(operator,x,y):
return{
'add':lambda :x+y,
'sub':lambda :x-y,
'mul':lambda :x*y,
'div':lambda :x/y,
}.get(operator,lambda :None)()
print calculator_dict('add',5,6)
print calculator_dict('haha',9,0)
result:
11
None
以上技巧,个人认为比较实用。如果还有其他好用技巧,欢迎一块探讨学习。