• 字典


    1.字典的主要属性

    ​ 1.通过键而不是通过偏移来读取

    ​ 2.任意对象的无序集合

    ​ 3.可变长、异构、任意嵌套

    ​ 4.属于可变映射类型

    ​ 5.对象引用表(和列表一样,字典储存的是对象引用)

    2.操作
    2.1成员关系:键存在测试
    >>> d = {'food':'cake'}
    >>> 'cake' in d
    False
    >>> 'food' in d
    True
    
    2.2keys、values和items方法

    ​ keys方法能返回字典中所有的键,可以将它们收集在一个列表,对于按顺序处理字典是非常有用的。

    values返回所有的值,keys、values和items返回的是可迭代视图,而不是列表。

    >>> d = {'a':1,'b':2,'c':3}
    >>> d.keys()
    dict_keys(['a', 'b', 'c']) #可迭代视图
    >>> list(d.keys())
    ['a', 'b', 'c']
    >>> list(d.items())
    [('a', 1), ('b', 2), ('c', 3)]
    
    2.3get方法

    ​ 读取不存在的键会出错,使用get方法能够返回默认值none(或自定义)

    >>> d['d']
    Traceback (most recent call last):
      File "<pyshell#9>", line 1, in <module>
        d['d']
    KeyError: 'd'
    >>> d.get('d','N')
    'N'
    
    2.4update方法

    ​ 字典的update方法类似于合并,但是和位置顺序无关;会覆盖相同键的值

    >>> d = {'a':1,'b':2,'c':3}
    >>> d1 = {'c':6,'d':7}
    >>> d.update(d1)
    >>> d
    {'a': 1, 'b': 2, 'c': 6, 'd': 7}
    #a.update(b):用b来更新a, b不变。
    
    
    3.for 循环遍历
    >>> for key in d:print(key,'	',d[key])
    a 	 1
    b 	 2
    c 	 6
    d 	 7
    #注意for循环迭代每一个键,for key in d等同于for key in d。keys()
    
    4.字典用法注意事项

    ​ 1.序列运算无效

    ​ 2.对新索引赋值会添加项

    ​ 3.键不一定总是字符串(任何不可变对象都是可以的,例如整数(可以用来模拟列表,例如:d = {},d[99] ='abc'))

    5.创建字典的四种方法
    1.传统的文字表达(事先拼出整个字典时)
    {’name':'Bob','age':18}
    2.通过键逐个赋值
    d = {}  (需要一次动态建立字典的一个字段时)
    d['name']='Bob'
    d['age']=18
    3.关键字参数形式  (键必须都是字符串才行)
    dict(name='Bob',age=18)  
    4.(键,值)元组形式   (程序运行时把键和值逐步形成序列时,比较有用)
    dict([('name','Bob'),('age',18)])
    
    6.fromkeys、zip()函数以及字典解析
    6.1fromkeys

    ​ 如果所有键的值都相同,可以传入一个键列表,以及初始值

    >>> dict.fromkeys(['a','b','c'],0)
    {'a': 0, 'b': 0, 'c': 0}
    >>> dict.fromkeys('abc',0)
    {'a': 0, 'b': 0, 'c': 0}
    >>> dict.fromkeys('abc')
    {'a': None, 'b': None, 'c': None}
    
    
    6.2zip()函数
    >>> zip(['a','b','c'],[1,2,3])
    <zip object at 0x031BD030>
    >>> list(zip(['a','b','c'],[1,2,3]))
    [('a', 1), ('b', 2), ('c', 3)]
    #通过zip()函数创建字典  dict(zip(keyslist,valslist))
    >>> dict(zip(['a','b','c'],[1,2,3]))
    {'a': 1, 'b': 2, 'c': 3}
    
    
    6.3字典解析
    #与fromkeys类似
    >>> d={x:0 for x in ['a','b','c']}
    >>> d
    {'a': 0, 'b': 0, 'c': 0}
    #与zip类似
    >>> d = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
    {'a': 1, 'b': 2, 'c': 3}
    
    7.字典视图

    ​ 字典的keys、values和items都返回视图对象,python2.6中它们返回实际的结果列表,视图对象是可迭代的,这就意味着对象每次产生一个结果项,而不是在内存中立即产生结果列表。字典视图还保持了字典成分的最初顺序,反映字典未来的修改,并且能够支持集合操作。它们不是列表,并不支持索引和列表sort方法,打印时也不显示自己的项。

    #字典视图并非创建之后不能修改,它们可以动态反映在视图对象创建后对字典做出的修改
    >>> d = {'a':1,'b':2,'c':3}			       
    >>> k = d.keys()			       
    >>> v = d.values()			       
    >>> k			       
    dict_keys(['a', 'b', 'c'])
    >>> v			       
    dict_values([1, 2, 3])
    >>> del d['c']			       
    >>> k			       
    dict_keys(['a', 'b'])
    >>> v			       
    dict_values([1, 2])
    

    ​ keys()方法所返回的视图对象类似于集合,并且支持交集和并集等常见的集合操作;values视图不是这样的,因为它们不是唯一的,但items结果是。

    >>> k | {'x':9}			       
    {'b', 'x', 'a'}
    >>> v | {'x':9}			       
    Traceback (most recent call last):
      File "<pyshell#34>", line 1, in <module>
        v | {'x':9}
    TypeError: unsupported operand type(s) for |: 'dict_values' and 'dict'
    >>> d.items() | {'x':9}			       
    {('b', 2), 'x', ('a', 1)}
     
    

    ​ keys不会返回列表,要想排序键,要么转换为列表,要么在键视图或字典自身上使用sorted()函数

    >>> d = {'a':1,'b':2,'c':3}
    >>> k = d.keys()
    >>> k.sort()
    Traceback (most recent call last):
      File "<pyshell#18>", line 1, in <module>
        k.sort()
    AttributeError: 'dict_keys' object has no attribute 'sort'
    >>> K = list(k)
    >>> K.sort(reverse = True)
    >>> K
    ['c', 'b', 'a']
    >>> sorted(d,reverse = True)
    ['c', 'b', 'a']
    >>> sorted(d.keys(),reverse = True)
    ['c', 'b', 'a']
    
  • 相关阅读:
    [LintCode] Single Number 单独的数字
    [LeetCode] 444. Sequence Reconstruction 序列重建
    [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
    [LeetCode] Arranging Coins 排列硬币
    [LeetCode] Ternary Expression Parser 三元表达式解析器
    [LeetCode] 436. Find Right Interval 找右区间
    在Mac上配置全局的Git忽略文件
    Git『Everything up-to-date』问题解决
    Android组件化框架项目详解
    Android架构设计之插件化、组件化
  • 原文地址:https://www.cnblogs.com/notfind/p/11378047.html
Copyright © 2020-2023  润新知