zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    COM学习(三)——数据类型
    com学习(一)GUID 和 接口
    Dll学习(二)__declspec用法详解
    dll 学习(一)
    PostMessage与SendMessage的区别(二)
    sendmessage和postmessage的区别
    用Java开发代理服务器
    JAVA编写WEB服务器
    【1.3】Django HelloWorld
    【1.2】初识Django应用
  • 原文地址:https://www.cnblogs.com/zhangmingfeng/p/11777583.html
Copyright © 2011-2022 走看看