美文网首页生信程序员Python全栈工程师
66、4-字典遍历、缺省字典、有序字典

66、4-字典遍历、缺省字典、有序字典

作者: BeautifulSoulpy | 来源:发表于2019-06-09 20:21 被阅读3次
    人生最大的遗憾,不是你错过了多少人
    
    我们一生中会遇见许多人,有些人教会我们爱、关心、陪伴,有些人则让我们感受什么是挫败、难过、受伤,但最终随着时间的流逝,大部分人都渐行渐远,最后留下的只剩我们自己。
    
    曾经我们因为在意别人的感受,而让自己受伤;
    
    曾经我们因为想要去讨好别人,却忽视自己真正想要的是什么;
    曾经我们以为让所有人喜欢自己就是最棒的事情,最后才发现最不喜欢自己的人那个人,就是自己……
    
    人生中最大的遗憾不是你错过了多少人,而是你不知道自己有多珍贵。
    
    所以,人生的旅程也是我们不断寻找自己的旅程,当我们真正找到自己,建立起属于自己的自爱系统,就可以看到自我当下的转变。
    
    
    
    -2-一个人真正的自由,就是为自己做出选择
    
    罗伯特·班尼特说:“你的人生是你做出的所有选择的汇总。如果你能控制选择的过程,那么便能控制你人生的所有方面。通过对自己负责,你会获得自由。”
    
    因此,一个人真正的自由,就是有能力为自己做出选择。选择喜欢的生活方式、选择欣赏的伴侣、选择热爱的工作……然后为自己的选择负责。
    
    我们将会拥有怎样的生活,很大程度上取决于你自己想要拥有怎样的人生。如果你不给自己设限,年龄、外貌、性别……这些都不会打败你,你也将收获更为广阔的未来。
    
    爱自己,是每个人天生都有的能力,只是我们需要练习才能学会。
    
    

    用好字典的关键在于Key
    字典不会用,基本就不会编程,字典非常重要;

    1.字典中的元素访问--三种方式
    • d[key]
      key不存在返回KeyError ;
    • get(key[,default])
      key不存在返回缺省值,没有设置返回缺省值;
    • setdefault(key[,default])
      key不存在,添加KV对,value为default,没有设置返回缺省值;
    2.字典的删除;
    • pop(key[key,default])
      key 存在,移除它,返回它的value;
      key不存在返回default ;
      default未设置,Key不存在则抛出KeyError异常;
    • popitem()
      移除并返回一个任意的键值对;
      字典为empty,抛出KeyError 异常;
    • clear()
      清空字典
    3.字典的遍历

    使用for key, value in dict.items()可以遍历整个字典。如果你只喜欢遍历键名或值,你可以只使用for key in dict.keys()或 for value in dict.values()。

    # 1. 遍历 keys-value 
    for key, value in d1.items():
        print("{}->{}".format(key, value))
    for key, _ in d1.items():   #丢弃一项;
        print(key)
    
    # 2. 遍历key
    for key in d1.keys():
        print(key,type(key))     # str  / int  
    for k in d:
      print(d[k])
    
    # 3. 遍历value
    for value in d1.values():
        print(value)
    
    # 4. 遍历item,即kv对;
    for item in d.items():
      print(item)
      print(item[0],item[1])
    
    5. 通用写法:一般不会出现异常;
    for k in d:    #  遍历输出的是字典的keys  ;
      print(d[k])
    
    字典总结:
    1. Python3中,字典keys\values\items 方法返回一个类似一个生成器的可迭代对象;不会把函数的返回结果复制到内存中;不会产生内存copy,节省内存空间;
    d={}
    type(d.items())    #  dict_items([])
    2. Python2中,上面的方法返回一个新的列表,占据新的内存空间,所以Python2建议使用iterkeys、
    
    3.用好字典的关键在于Key
    
    
    3.1 字典循环移除元素——移除字典中值为字符串的一项
    d=dict(a=1,b=2,c=3,d='str1')
    print(d)
    lst=[]
    i=''
    for k in d.keys():
        print(k)
        if isinstance(d[k],str):
            lst.append(k)
    d.pop(lst[0])
    d
    
    循环内增加、删除value时不允许的;pop会在循环内报错;
    
    for k in d:     # 增加元素; dictionary changed size during iteration;
        d['a00']=100 
    
    4.缺省字典 collections.defaultdict([default_factory[,...]])

    第一个参数时default_factory,缺省为None,它提供一个初始化的函数,当key不存在的时候,这个工厂函数来生成key对应的value

    方法1:
    import random
    from collections import defaultdict
    
    d=defaultdict(list)
    for c in 'abcde':
        for i in range(random.randint(1,5)):
            if d[c] not in d:
                d[c]=[]
            d[c].append(i)
    print(d)
    
    方法2,3:
    import random
    
    d={}
    for c in 'abcde':
        for i in range(random.randint(1,5)):
            if not d.get(c):     #  if c not in d.keys():
                d[c]=[]
            d[c].append(i)
    print(d)
    总结:
    1.
    import random
    from collections import defaultdict
    
    d=defaultdict(list)   
    #等价于 d[c]=[]
    if d[c] not in d:
        d[c]=[]
    
    总结
    1.缺省字典中很多源码都在用;
    2.字典为空dict 时,append会报错;缺省字典相当于添加一个空list ;
    
    5.有序字典 OrderedDict (3.6.3版本才出现的;Ipython不会显示;原生Python才行)

    记录Key插入的顺序;

    # 有序字典的创建;
    from collections import OrderedDict
    d1 = OrderedDict()
    
    d = {}
    d['Tom']='A'
    d['Jack']='B'
    d['Leo']='C'
    d['Alex']='D'
    print('无序字典(dict):')
    for k,v in d.items():
        print(k,v)
    
    d1 = OrderedDict()   # 保证写入顺序
    d1['Tom']='A'
    d1['Jack']='B'
    d1['Leo']='C'
    d1['Alex']='D'
    print('\n有序字典(OrderedDict):')
    for k,v in d1.items():
        print(k,v)
    ---------------------------------
    无序字典(dict):
    Leo C
    Jack B
    Tom A
    Alex D
    
    有序字典(OrderedDict):
    Tom A
    Jack B
    Leo C
    Alex D
    

    相关文章

      网友评论

        本文标题:66、4-字典遍历、缺省字典、有序字典

        本文链接:https://www.haomeiwen.com/subject/smznxctx.html