Python字典处理技巧

从字典中取值(不想由于搜索的键不存在而异常)

解决方法:

使用字典的get方法 (get方法只读取字典的值而不会去修改字典)

d={'key':'value'}
print d.get('key','not found')
print d.get('keys','not found')

假如键key存在,那么get方法就会返回相应的值,否则,返回第二个参数


给字典添加一个条目

解决方法:

使用字典的setdefault方法,假设正在创建一个由单词到页数的映射,关键的代码为 

def addword(theIndex, word, pagenumber):
    theIndex.setdefault(word, [ ]).append(pagenumber)

假设word键存在,setdefault返回的就是key对应的value,否则的话,就新增一个word键,并添加value,这里默认添加的是一个空的列表。

setdefault方法返回的是value,这里就是一个列表,代表了单词到页数的映射表,之后调用append方法,就可以添加这个页数了。


将列表元素交替的作为键和值来创建字典

解决方法:

使用dict和zip方法分片之后合并 

def dictFormList(keyAndValues):
    return dict(zip(keyAndValues[::2],keyAndValues[1::2]))

获取字典的一个子集

解决方法:

如果不想改动源字典 

def sub_dict(somedict, somekeys, default=None):
    return dict([(k, somedict.get(k, default)) for k in somekeys])

如果想从源字典中删除符合条件的项目 

def sub_dict(somedict, somekeys, default=None):
    return dict([(k, somedict.pop(k, default)) for k in somekeys])

反转字典

解决方法:

def invert_dict(d):
    return dict([(v,k) for k,v in d.iteritems()])


用字典分派方法和函数(就是switch语句)

解决方法:

同样的,可以使用字典进行操作 

animals=[]
number_of_felines=0
def deal_with_a_cat():
    global number_of_felines
    print "meow"
    animals.append('feline')
    number_of_felines+=1
def deal_with_a_dog():
    print "bark"
    animals.append('canine')
def deal_with_a_bear():
    print "watch out for the *HUG*!"
    animals.append('ursine')

tokenDict={
    "cat":deal_with_a_cat,
    "dog":deal_with_a_dog,
    "bear":deal_with_a_bear,
    }

words=["cat","bear","cat","dog"]
for word in words:
    tokenDict[word]()
nf=number_of_felines
print 'we met %d feline%s' % (nf, 's'[nf==1:])
print 'the animal we met were:',' '.join(animals)

字典的并集和交集

解决方法:

使用fromkeys创建字典,例如 

a=dict.fromkeys(xrange(1000))
b=dict.fromkeys(xrange(500,1500))

最快的计算并集的方法是 

union=dict(a,**b)

而最快且最简洁的方法是 

inter=dict.fromkeys([x for x in a if x in b])


原文地址:https://www.cnblogs.com/riskyer/p/3323126.html