字典类型

字典

  • 字典是以键值对的映射关系存储的,通过字典的key读取values,这样取值是非常快的

    • 字典的定义方式: 中括号里面key: values多对值由逗号分隔

      >>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      >>> my_dict
      {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}
      # 字典的嵌套定义 (字典可以多层嵌套)
      >>> my_dict = {
          'name': 'dinghao',
          'age': '23',
          'like': {
              'play': ['电脑','游戏'],
              'look': '三国演义',
          },
      }

      # 找出我喜欢看什么?
    • 字典中的key是不可变的,不可存储为可变对象,但是values是可以存任意类型的值的

      # 可以看到,将key定义为列表,发生了报错
      >>> my_dict = {[1]: 'number'}
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      TypeError: unhashable type: 'list'
      ​
      

        

    • 字典中key是唯一的,不可以重复

      >>> my_dict = {'name': 'dingh','name': 'dinghao'}
      >>> my_dict
      {'name': 'dinghao'}
      # 这里定义了两个一样key值,后面定义的将前面的覆盖了,所以key是唯一的
      

        

  • 字典的操作

    • 字典的读取: 通过key值读取values

      >>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      >>> my_dict['name']
      'dinghao'
      >>> my_dict['like'][0]
      '学习'
      # 还可以通过字典的内置方法去调用
      >>> my_dict.keys()# 获取到字典的所有key
      dict_keys(['name', 'age', 'like'])
      >>> for key in my_dict.keys():# 通过for循环获取
      ...     print(key)
      ...
      name
      age
      like
      >>> my_dict.values()# 获取到字典的所有values
      dict_values(['dinghao', 23, ['学习', '读书']])
      >>> for values in my_dict.values():# 通过for循环获取
      ...     print(values)
      ...
      dinghao
      23
      ['学习', '读书']
      >>> my_dict.items()# 获取到字典的所有key和values
      dict_items([('name', 'dinghao'), ('age', 23), ('like', ['学习', '读书'])])
      >>> for var in my_dict.items():#通过for循环指定单个值,会将key和values组成一个元组赋值
      ...     print(var)
      ...
      ('name', 'dinghao')
      ('age', 23)
      ('like', ['学习', '读书'])
      >>> for key,values in my_dict.items():  #通过for循环指定两个值,会将key和values分别赋值
      ...     print('%s: %s' % (key,values))
      ...
      name: dinghao
      age: 23
      like: ['学习', '读书']
      

        

    • 字典其他常用方法

      # 先通过dir函数查看一下
    • >>> dir(dict)
      ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
      View Code

     # 其他常用方法示例

    • my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      # get# 获取字典的值
      >>> my_dict.get('name')
      'dinghao'
      >>> my_dict.get('aaa')# 这里强烈说明一点get方法的好处,如果key不存在时,get方法不会报错
      >>> my_dict.get('aaa','key不存在')# 可以指定输出默认值
      'key不存在'# update# 修改字典的值
      >>> my_dict.update({'name': 'dingh'})
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}
      ​
      # 也可以通过key直接修改字典的values,如果key存在是更改,如果不存在则添加
      >>> my_dict['name'] = 'dingh'
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}
      >>> my_dict['sex'] = 'man'
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书'], 'sex': 'man'}
      ​
      # pop# 弹出字典的值并显示对应的values
      >>> my_dict.pop('name')# 可以看到弹出了name,并显示了key对应的values
      'dingh'
      >>> my_dict
      {'age': 23, 'like': ['学习', '读书']}
      >>> my_dict.pop('abc')# 如果key不存在时,则会报错
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      KeyError: 'abc'# popitem随机删除一组key与values,如果字典为空会报错
      >>> my_dict.popitem()
      ('like', ['学习', '读书'])
      >>> my_dict.popitem()
      ('age', 23)
      >>> my_dict.popitem()
      ('name', 'dinghao')
      >>> my_dict.popitem()
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      KeyError: 'popitem(): dictionary is empty'
         
      # clear清空字典
      >>> my_dict.clear()# 清空为一个空字典
      >>> my_dict
      {}
      ​
      # del 删除变量及对应的值
      >>> del my_dict
      >>> my_dict
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      NameError: name 'my_dict' is not defined
      ​
      # copy 浅拷贝(涉及到深浅拷贝,只拷贝一级的值,一级以上的值不会拷贝)
      >>> my_dict2 = my_dict.copy()
      >>> my_dict2
      {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}
      ​
      # fromkeys 
      # 用于创建新的字典,传递一个可迭代的对象(字符串,列表,字典,元祖)分别作为字典key对应同一个values
      >>> my_dict = dict.fromkeys('a',[1,2,3,4,5])
      >>> my_dict
      {'a': [1, 2, 3, 4, 5]}
      >>> my_dict = dict.fromkeys(1,[1,2,3,4,5])
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      TypeError: 'int' object is not iterable
      ​
      # setdefault 如果字典中包含给的key,则返回key对应的values,否则返回为key设置的值
      >>> my_dict.setdefault('name','你好')
      'dingh'
      >>> my_dict.setdefault('abc','你好')
      '你好'
      View Code

       

字典

  • 字典是以键值对的映射关系存储的,通过字典的key读取values,这样取值是非常快的

    • 字典的定义方式: 中括号里面key: values多对值由逗号分隔

      >>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      >>> my_dict
      {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}
      # 字典的嵌套定义 (字典可以多层嵌套)
      >>> my_dict = {
         'name': 'dinghao',
         'age': '23',
         'like': {
             'play': ['电脑','游戏'],
             'look': '三国演义',
        },
      }
      # 找出我喜欢看什么?
    • 字典中的key是不可变的,不可存储为可变对象,但是values是可以存任意类型的值的


      # 可以看到,将key定义为列表,发生了报错
      >>> my_dict = {[1]: 'number'}
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      TypeError: unhashable type: 'list'
    • 字典中key是唯一的,不可以重复

      >>> my_dict = {'name': 'dingh','name': 'dinghao'}
      >>> my_dict
      {'name': 'dinghao'}
      # 这里定义了两个一样key值,后面定义的将前面的覆盖了,所以key是唯一的
  • 字典的操作

    • 字典的读取: 通过key值读取values

      >>> my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      >>> my_dict['name']
      'dinghao'
      >>> my_dict['like'][0]
      '学习'
      # 还可以通过字典的内置方法去调用
      >>> my_dict.keys()# 获取到字典的所有key
      dict_keys(['name', 'age', 'like'])
      >>> for key in my_dict.keys():# 通过for循环获取
      ...     print(key)
      ...
      name
      age
      like
      >>> my_dict.values()# 获取到字典的所有values
      dict_values(['dinghao', 23, ['学习', '读书']])
      >>> for values in my_dict.values():# 通过for循环获取
      ...     print(values)
      ...
      dinghao
      23
      ['学习', '读书']
      >>> my_dict.items()# 获取到字典的所有key和values
      dict_items([('name', 'dinghao'), ('age', 23), ('like', ['学习', '读书'])])
      >>> for var in my_dict.items():#通过for循环指定单个值,会将key和values组成一个元组赋值
      ...     print(var)
      ...
      ('name', 'dinghao')
      ('age', 23)
      ('like', ['学习', '读书'])
      >>> for key,values in my_dict.items():  #通过for循环指定两个值,会将key和values分别赋值
      ...     print('%s: %s' % (key,values))
      ...
      name: dinghao
      age: 23
      like: ['学习', '读书']
    • 字典其他常用方法

      # 先通过dir函数查看一下
      >>> dir(dict)
      ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
      # 介绍一下常用的方法
      my_dict = {'name': 'dinghao','age': 23,'like': ['学习','读书']}
      # get# 获取字典的值
      >>> my_dict.get('name')
      'dinghao'
      >>> my_dict.get('aaa')# 这里强烈说明一点get方法的好处,如果key不存在时,get方法不会报错
      >>> my_dict.get('aaa','key不存在')# 可以指定输出默认值
      'key不存在'

      # update# 修改字典的值
      >>> my_dict.update({'name': 'dingh'})
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}

      # 也可以通过key直接修改字典的values,如果key存在是更改,如果不存在则添加
      >>> my_dict['name'] = 'dingh'
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书']}
      >>> my_dict['sex'] = 'man'
      >>> my_dict
      {'name': 'dingh', 'age': 23, 'like': ['学习', '读书'], 'sex': 'man'}

      # pop# 弹出字典的值并显示对应的values
      >>> my_dict.pop('name')# 可以看到弹出了name,并显示了key对应的values
      'dingh'
      >>> my_dict
      {'age': 23, 'like': ['学习', '读书']}
      >>> my_dict.pop('abc')# 如果key不存在时,则会报错
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      KeyError: 'abc'

      # popitem随机删除一组key与values,如果字典为空会报错
      >>> my_dict.popitem()
      ('like', ['学习', '读书'])
      >>> my_dict.popitem()
      ('age', 23)
      >>> my_dict.popitem()
      ('name', 'dinghao')
      >>> my_dict.popitem()
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      KeyError: 'popitem(): dictionary is empty'
         
      # clear清空字典
      >>> my_dict.clear()# 清空为一个空字典
      >>> my_dict
      {}

      # del 删除变量及对应的值
      >>> del my_dict
      >>> my_dict
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      NameError: name 'my_dict' is not defined

      # copy 浅拷贝(涉及到深浅拷贝,只拷贝一级的值,一级以上的值不会拷贝)
      >>> my_dict2 = my_dict.copy()
      >>> my_dict2
      {'name': 'dinghao', 'age': 23, 'like': ['学习', '读书']}

      # fromkeys
      # 用于创建新的字典,传递一个可迭代的对象(字符串,列表,字典,元祖)分别作为字典key对应同一个values
      >>> my_dict = dict.fromkeys('a',[1,2,3,4,5])
      >>> my_dict
      {'a': [1, 2, 3, 4, 5]}
      >>> my_dict = dict.fromkeys(1,[1,2,3,4,5])
      Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
      TypeError: 'int' object is not iterable

      # setdefault 如果字典中包含给的key,则返回key对应的values,否则返回为key设置的值
      >>> my_dict.setdefault('name','你好')
      'dingh'
      >>> my_dict.setdefault('abc','你好')
      '你好'
    •  

posted @ 2018-10-25 21:15  浩小白  Views(243)  Comments(0Edit  收藏  举报