鱼C论坛

 找回密码
 立即注册
查看: 1831|回复: 0

[技术交流] python学习笔记之字典

[复制链接]
发表于 2017-7-28 09:40:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
字典
  • 字典使用大括号
  • 字典属于映射类型,不属于序列类型(字符串,列表,元组属于序列类型)
  • 字典使用中括号进行索引
      >>> dict1 = {10:'one' , 20:'two' , 30:'three'}
      >>> dict1[20]
      'two'
    冒号前为key(键),冒号后为value(值)。通过中括号索引key,打印value
  • 使用dict创建字典(dict只有一个参数,其中dict内容,可以使用元组也可使用列表,只要构成映射关系即可)
      >>> dict2 = dict(((1,'z'),(2,'h'),(3,'a'),(4,'n'),(5,'g')))
      >>> dict2
      {1: 'z', 2: 'h', 3: 'a', 4: 'n', 5: 'g'}
  • 直接使用key=value的方式创建字典
      >>> dict3 = dict(a = '1' , b = '2')
      >>> dict3
      {'a': '1', 'b': '2'}
    不能将key用引号括起来
      >>> dict3 = dict('a' = '1' , b = '2')
      SyntaxError: keyword can't be an expression
    因为给了key是a之后,就会把a以字符串的形式包裹起来
  • 若直接给字典的键赋值,如果键本来就在字典里面存在,则改写键所对应的值;如果键不存在,则创建一个新的键,并为它赋值
      >>> dict3['a']
      '1'
      >>> dict3['a'] = '12345'
      >>> dict3
      {'a': '12345', 'b': '2'}
      >>> dict3['c'] = '234'
      >>> dict3
      {'a': '12345', 'b': '2', 'c': '234'}
  • 字典的内建函数
    • fromkeys()创建并返回一个新的字典,有两个参数fromkeys(s[,v]),s是键值,v(可选参数,默认为none)是键所对应的值
        >>> dict1 = {}
        >>> dict1.fromkeys((1,2,3))
        {1: None, 2: None, 3: None}
        >>> dict1.fromkeys((1,2,3),'a')
        {1: 'a', 2: 'a', 3: 'a'}
      不能使用以下方式试图给每个key一次赋值
        >>> dict1.fromkeys((1,2,3),('a','b','c'))
        {1: ('a', 'b', 'c'), 2: ('a', 'b', 'c'), 3: ('a', 'b', 'c')}
    • 试图修改某个key的值,实际上会新建一个字典
        >>> dict1.fromkeys((1,2,3),'a')
        {1: 'a', 2: 'a', 3: 'a'}
        >>> dict1.fromkeys((1,3),'b')
        {1: 'b', 3: 'b'}
  • 访问字典的几个方法
    • keys()
      返回字典键的引用
        >>> dict1 = dict1.fromkeys(range(5),'y')
        >>> dict1
        {0: 'y', 1: 'y', 2: 'y', 3: 'y', 4: 'y'}
        >>> for each in dict1.keys():
               print(each)
      
        0
        1
        2
        3
        4
    • values()
      返回键的值
        >>> for each in dict1.values():
               print(each)
      
        y
        y
        y
        y
        y  
    • items()
      返回每一项的值
        >>> for each in dict1.items():
               print(each)
      
        (0, 'y')
        (1, 'y')
        (2, 'y')
        (3, 'y')
        (4, 'y')
    • get()方法:当使用print打印一个字典中没有的键值得时候会报错,如下
        >>> dict1
        {0: 'y', 1: 'y', 2: 'y', 3: 'y', 4: 'y'}
        >>> dict1[5]
        Traceback (most recent call last):
            File "<pyshell#94>", line 1, in <module>
                dict1[5]
        KeyError: 5
      使用get方法打印不存在的键返回的是none对象
        >>> dict1.get(5)
        >>> print(dict1.get(5))
        None
      可以设置没有该键值得返回值
        >>> dict1.get(5,'NO')
        'NO'
  • clear()方法清空字典
      >>> dict1
      {0: 'y', 1: 'y', 2: 'y', 3: 'y', 4: 'y'}
      >>> dict1.clear()
      >>> dict1
      {}
  • copy()方法:浅拷贝(浅拷贝!= 赋值:地址不同)
  • pop()
      >>> a
      {1: 'one', 2: 'two', 3: 'three'}
      >>> a.pop(2)
      'two'
      >>> a
      {1: 'one', 3: 'three'}
  • popitem():随机弹出一个键值
      >>> a.popitem()
      (3, 'three')
      >>> a
      {1: 'one'}
  • setdefault():setdefault设置初始值,后面给元素赋值后再使用setdefault不会改变该值
      >>> a
      {1: 'one'}
      >>> a.setdefault('小白')
      >>> a
      {1: 'one', '小白': None}
      >>> a.setdefault(2, 0)
      0
      >>> a
      {1: 'one', '小白': None, 2: 0}
      >>> a[2] += 1
      >>> a
      {1: 'one', '小白': None, 2: 1}
      >>> a.setdefault(2, 0)
      1
      >>> a
      {1: 'one', '小白': None, 2: 1}
  • update()利用一个字典或者映射来更新一个字典
      >>> a
      {1: 'one', '小白': None}
      >>> b = {'小白':'dog'}
      >>> a.update(b)
      >>> a
      {1: 'one', '小白': 'dog'}
  • python字典不支持一键多值,相同的键值会覆盖上一次键值
      >>> dict1 = {1:'one', 1:'yi'}
      >>> dict1[1]
      'yi'
  • python会调用内部的散列函数,将key值作为参数进行转换,得到一个唯一的地址(相同的键值(123/123.0)转换得到相同的地址),然后将value存放在地址中
  • key值必须是可哈希的,即键值必须可以通过散列函数计算出唯一地址
  • 由于字典存放方式(使用哈希算法存储),所以使用in和not in查找key是否存在于字典中的效率更高,时间复杂度O(1)

评分

参与人数 1鱼币 +5 收起 理由
小甲鱼 + 5

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 17:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表