美文网首页清风PythonPythonpython
Python字典技巧一锅炖

Python字典技巧一锅炖

作者: 清风Python | 来源:发表于2019-06-09 21:18 被阅读16次
    优雅的字典

    北冥有鱼,其名为鲲,鲲之大,一锅炖不下。鲲炖不下,那今天我们来一锅炖了字典(dict)。
    在Python的使用中,字典是一个基础且使用率报表的数据类型。

    字典的创建与初始化
    #创建一个字典
    a={}
    b=dict()
    """
    我们常初在始化空字典时,使用到上面两种方式。
    如果我们在字典创建的同时需要赋值呢?
    """
    # 普通的方式
    a={'a':1,'b':'to','c':'63'}
    # 更优雅的赋值
    b=dict(a=1,b='to',c='63') 
    """不管从重复输入的引号上,还是从输入方便考虑,你都该选择后者
    再深入一下,如果我们现在有四个人,
    需要统计他们的工资,初始没人都是10000,该如何创建?
    按照上面的dict(x=y)没错,但批量的初始化,你应该使用更优雅的方式:
    """
    names=["zhang","wang","li","zhao"]
    # 普通方式
    users = dict(zhang=10000,wang=10000,li=10000,zhao=10000)
    # 更优雅的方式
    user1.dict().formatkeys(names,10000) 
    
    获取字典的值
    a={'a':1,'b':'to','c':'63'}
    a['b']
    >>> output:  to
    """
    上面的这种value值获取方式较为常见,但如果a中没有b,
    或者在字典的使用过程中b 这个key被del了呢?
    这是会报一个KeyError的错误,所以养成好习惯,使用下面的方式
    当key值不存在时,返回none,或者自定义一个默认值。
    """
    a.get('b',[default_no可选...])
    
    说说更新与删除
    #  更新
    a={'a':1,'b':'to','c':'63'}
    a.update('a':2)
    a.update(a=2) # 这种方式同样适用与更新操作
    # 删除某个键值对
    del a['a']
    pop('a')
    """
    两者都可以达到删除某个键值对的操作,
    但后者相当于去除后删除,具备返回值
    """
    del a 删除字典a
    a.clear()清空字典a
    
    判断has_key操作
    """
    python2中,判断字典是否存在某个值,可以使用has_key('key'),
    但在python3中取消了该参数,如果我们想判断可以使用以下方式:
    """
    a={'a':1,'b':'to','c':'63'}
    'b' in a.keys()
    a.__contains__('b')
    
    使用enumerate,优雅的输出字典
    a = {'a': 1, 'b': 'to', 'c': '63'}
    for line, item in enumerate(a.items(), start=1):
        print("[{}] {} --> {}".format(line, *item))
    >>> output:
    """
    [1] a --> 1
    [2] b --> to
    [3] c --> 63
    """
    
    OrderedDict的使用

    我们知道默认的dict(字典)是无序的,但是在某些情形我们需要保持dict的有序性,这个时候可以使用OrderedDict,它是dict的一个subclass(子类),但是在dict的基础上保持了dict的有序型,下面我们来看一下使用方法。
    example1:

    >>> from collections import OrderedDict
    # 无序的dict
    >>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
    
    这是一个无序的dict(字典),现在我们可以使用OrderedDict来让这个dict变得有序。
    
    # 将d按照key来排序
    >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
    OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
    # 将d按照value来排序
    >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
    OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
    # 将d按照key的长度来排序
    >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
    OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
    

    example2:

    """
    使用popitem(last=True)方法可以让我们按照LIFO(先进后出)的顺序删除dict中的key-value,
    即删除最后一个插入的键值对,如果last=False就按照FIFO(先进先出)删除dict中key-value。
    """
    >>> d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
    # 将d按照key来排序
    >>> d = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
    >>> d
    OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
    # 使用popitem()方法来移除最后一个key-value对
    >>> d.popitem()
    ('pear', 1)
    # 使用popitem(last=False)来移除第一个key-value对
    >>> d.popitem(last=False)
    ('apple', 4)
    

    example3:

    """
    使用move_to_end(key, last=True)来改变有序的OrderedDict对象的key-value顺序,
    通过这个方法我们可以将排序好的OrderedDict对象中的任意一个key-value,
    插入到字典的开头或者结尾。
    """
    >>> d = OrderedDict.fromkeys('abcde')
    >>> d
    OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])
    # 将key为b的key-value对移动到dict的最后
    >>> d.move_to_end('b')
    >>> d
    OrderedDict([('a', None), ('c', None), ('d', None), ('e', None), ('b', None)])
    >>> ''.join(d.keys())
    'acdeb'
    # 将key为b的key-value对移动到dict的最前面
    >>> d.move_to_end('b', last=False)
    >>> ''.join(d.keys())
    'bacde'
    

    好了,今天的内容就到这里,如果觉得有帮助,记得点赞支持。欢迎大家关注我的公众号【清风Python】,获取更多Python相关的知识,公众号内有整理好的各类福利数据供大家下载,扫码关注:


    清风Python

    相关文章

      网友评论

        本文标题:Python字典技巧一锅炖

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