Python字典

字典

  字典是Python提供的一种常用的数据结构,它用于存放具有映射关系的数据。

  比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关系。如果单纯使用两个列表来保存这组数据,则无法记录两组数据之间的关联关系。

  为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value。由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。程序可使用花括号语法来创建字典,空的花括号既创建空字典,key与value之间用":"隔开,多个key-value之间用","隔开。

  示例如下:

a={}
b={"y":1,"x":3}
c={(85,90):"good",60:"bad"}  #第一个key值为元组,第二个key值是整数值,是合法的
print(a,b,c)

 需要注意的是,元组可以作为字典的key值,而列表不能作为字典的key值。这是因为字典要求key值必须是不可变类型。

  在使用 dict() 函数创建字典时,可以传入多个列表或元组参数作为 key-value 对,每个列表或元组将被当成一个 key-value 对,因此这些列表或元组都只能包含两个元素。

  示例如下:

fruit=[('peach',5),('apple',3.5)]
cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
d1=dict(fruit)
d2=dict(cars)
print(d1)
print(d2)

 

 

 

 

字典的基本用法

  对于初学者而言,应牢记字典包含多个 key-value 对,而 key 是字典的关键数据,因此程序对字典的操作都是基于 key 的。基本操作如下:

  • 通过 key 访问 value 。  #使用是方括号语法,方括号中放的是 key,而不是列表或元组中的索引。
    • cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print(d2['BMW'])

  • 通过 key 添加 key-value 对。
    • cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      d2['DF']=8.2
      print(d2)

  • 通过 key 删除 key-value 对。  #使用del语句删除字典中的key-value对
    • cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      del d2['AUDI']
      print(d2)

  • 通过 key 修改 key-value 对。
    • cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      d2['BENS']=8.0
      print(d2)

  • 通过 key 判断指定 key-value 对是否存在。  #要判断字典是否包含指定的 key,则可以使用 in 或 not in 运算符。
    • cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print('d2' in d2)
      print('BMW' in d2)

      需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的。

  通过上面介绍可以看出,字典的 key 是它的关键。换个角度来看,字典的 key 就相当于它的索引,只不过这些索引不一定是整数类型,字典的 key 可以是任意不可变类型。可以这样说,字典相当于索引是任意不可变类型的列表:而列表则相当于 key 只能是整数的字典。因此,如果程序中要使用的字典的 key 都是整数类型,则可考虑能否换成列表。

  需要注意的是,列表不允许对不存在的索引赋值,但字典则允许直接对不存在的 key 赋值。

 

 

字典的常用方法

  • clear()方法
    • clear() 用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      d2.clear()
      print(d2)

  • get()方法
    • get() 方法其实就是根据 key 来获取 value,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回默认值,不会导致错误。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print(d2.get('BENS'))
      print(d2.get('DF'))

  • update()方法
    • update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      d2.update({'BMW':4.5, 'PORSCHE': 9.3})
      print(d2)

  • items()、keys()、values()
    • items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value。这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象,返回的对象不能被直接操作,但可通过 list() 函数把它们转换成列表。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      d2.update({'BMW':4.5, 'PORSCHE': 9.3})
      ims = d2.items()
      print(type(ims)) 
      # 将dict_items转换成列表
      print(list(ims)) 
      # 访问第2个key-value对
      print(list(ims)[1]) 
      # 获取字典所有的key,返回一个dict_keys对象
      kys = d2.keys()
      print(type(kys)) 
      # 将dict_keys转换成列表
      print(list(kys)) 
      # 访问第2个key
      print(list(kys)[1])
      # 获取字典所有的value,返回一个dict_values对象
      vals = d2.values()
      # 将dict_values转换成列表
      print(type(vals)) 
      # 访问第2个value
      print(list(vals)[1]) 

  • pop()方法
    • pop() 方法用于获取指定 key 对应的 value,并删除这个 key-value 对。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print(d2.pop('BMW'))
      print(d2)

  • popitem()方法
    • popitem() 方法用于随机弹出字典中的一个 key-value 对。此处的随机是伪随机,该方法实际上是弹出字典最后一个key-value对,只是由于字典存储key-value对的顺序不可知,才会觉得是随机弹出一个key-value对。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print(d2.popitem())
      print(d2)

  • setdefault()方法
    • setdefault() 方法用于根据 key 来获取对应 value 的值。setdefault() 方法总能返回指定 key 对应的 value;如果该 key-value 对存在,则直接返回该 key 对应的 value;如果该 key-value 对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value。
      cars = [['BMW', 8.5], ['BENS', 8.3], ['AUDI', 7.9]]
      d2=dict(cars)
      print(d2.setdefault('BMW',5.2))
      print(d2)
      print(d2.setdefault('DF',3.4))
      print(d2)

  • fromkeys()方法
    • fromkeys() 方法使用给定的多个 key 创建字典,这些 key 对应的 value 默认都是 None;也可以额外传入一个参数作为默认的 value。该方法一般不会使用字典对象调用,通常会使用 dict 类直接调用。
      d1=dict.fromkeys(['a','b'])
      d2=dict.fromkeys((1,2))
      d3=dict.fromkeys((1,2),'g')
      print(d1)
      print(d2)
      print(d3)

       

       

posted @ 2019-11-01 16:04  寡人略帅  阅读(210)  评论(1编辑  收藏  举报