zoukankan      html  css  js  c++  java
  • 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])


  • 相关阅读:
    Android基础之项目结构分析
    串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪
    C# 通过URL获取图片并显示在PictureBox上的方法
    学习资料集合
    C#语音朗读文本 — TTS的实现
    SQL SERVER 2008安装错误(is not a valid login or you do have permission)
    函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
    SerialPort使用
    Javascript函数的几种写法
    JS验证图片格式和大小并预览
  • 原文地址:https://www.cnblogs.com/riskyer/p/3323126.html
Copyright © 2011-2022 走看看