4.5 字典类型

微视频

与列表和元组有所不同,字典是另一种可变容器模型,且可存储任意类型的对象。本节讲述字典的基本操作。

4.5.1 认识字典类型

字典(Dictionary)是Python内非常有用的数据类型。字典使用大括号({})将元素列出。元素由键值(key)与数值(value)组成,中间以冒号(:)隔开。键值必须是字符串、数字或元组,这些对象是不可变动的;数值则可以是任何数据类型。字典的元素排列没有一定的顺序,因为可以使用键值来取得该元素。

创建字典的语法格式如下:

    字典变量={关键字1:值1,关键字2:值2,…}

大牛提醒

在同一个字典之内,关键字必须互不相同。创建字典并访问字典中的元素。

    >>>x={'一班': '张小明','二班': '李萌','三班': '张小明'}
    >>>x ['一班']
    '张小明'
    >>>x ['二班']
    '李萌'
    >>>x ['三班']
    '张小明'

从结果可以看出,字典中的关键字必须唯一,但是关键字对应的值可以相同。

大牛提醒

在获取字典中的元素值时,必须保证输入的键值在字典中是存在的,否则Python会产生一个KeyError错误。

4.5.2 字典的常用操作

字典的常用操作如下:

1.修改字典中的元素值

字典中的元素值是可以修改的。例如:

    >>>x={'一班': '张小明','二班': '李萌','三班': '张小明'}
    >>>x['三班'] = '张昌隆'
    >>>x
    {'一班': '张小明', '二班': '李萌', '三班': '张昌隆'}
2.删除字典中的元素

使用del语句可以删除字典中的元素。例如:

    >>>x = {'一班': '张小明', '二班': '李萌', '三班': '张昌隆'}
    >>>del x["三班"]
    >>>x
    {'一班': '张小明', '二班': '李萌'}
3.定义字典键值时需要注意的问题

字典键值是不能随便定义的,需要注意以下两点:

(1)不允许同一个键值多次出现。创建时如果同一个键值被赋值多次,那么只有最后一个值有效,前面重复的值将会被自动删除。例如:

    >>>x = {'一班': '张小明', '二班': '李萌', '一班': '张昌隆', '二班': '王明霞'}
    >>>x
    {'一班': '张昌隆', '二班': '王明霞'}

(2)因为字典键值必须不可变,所以可以用数字、字符串或元组充当,列表则不行。如果用列表做键值,将会报错。例如:

    >>>x = {["名称"]:"冰箱", "产地":"北京", "价格":"6500"}
    Traceback (most recent call last):
      File "<pyshell#33>", line 1, in <module>
        x = {["名称"]:"冰箱", "产地":"北京", "价格":"6500"}
    TypeError: unhashable type: 'list'

4.5.3 字典的内置函数和方法

本节主要讲述字典的内置函数和方法。

1.字典的内置函数

字典的内置函数包括len()、str()和type()。

(1)len(dict):计算字典元素个数,即键值的总数。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>len(x)
    2

(2)str(dict):将字典的元素转换为可打印的字符串形式。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>str(x)
    "{'一班': '张昌隆', '二班': '王明霞'}"

(3)type(variable):返回输入的变量类型,如果变量是字典,就返回字典类型。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>type(x)
    <class 'dict'>
2.字典的内置方法

字典对象有许多内置方法,在Python解释器内输入dir({}),就可以显示这些内置方法的名称。下面挑选常用的方法进行讲解。

(1)clear():清除字典中的所有元素。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>x.clear()
    >>>x
    {}

(2)copy():复制字典。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>y = x.copy()
    >>>y
    {'一班': '张昌隆', '二班': '王明霞'}

(3)get(k [, d]):k是字典的索引值,d是索引值的默认值。如果k存在,就返回其值,否则返回d。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>> x.get("一班")
    '张昌隆'
    >>> x.get("三班","不存在")
    '不存在'

(4)items():使用字典中的元素创建一个由元组对象组成的列表。例如:

    >>>x = {'一班': '张昌隆', '二班': '王明霞'}
    >>>x.items()
    dict_items([('一班', '张昌隆'), ('二班', '王明霞')])

(5)keys():使用字典中的键值创建一个列表对象。例如:

    >>>x = {"名称":"西瓜", "产地":"吐鲁番", "价格":"6.26"}
    >>>x.keys()
    dict_keys(['名称', '产地', '价格'])

(6)popitem():删除字典中的最后一个元素。例如:

    >>>x = {"名称":"西瓜", "产地":"吐鲁番", "价格":"6.26"}
    >>> x.popitem()
    ('价格', '6.26')
    >>> x
    {'名称': '西瓜', '产地': '吐鲁番'}
    >>>x.popitem()
    ('产地', '吐鲁番')
    >>> x
    {'名称': '西瓜'}

【例4.4】制作火车票查询系统(源代码\ch04\4.4.py)。

这里模拟火车票查询系统,输入车次编号,输出本次列车的出发站和终点站。

    aa=["G15","C2065","Z95","G565"]             #定义键的列表
    bb=["北京南—上海","北京南—天津","北京西—重庆北","北京西—郑州东"]#定义值的列表
    cc=dict(zip(aa,bb))                         #转换为字典
    print ("欢迎进入火车票查询系统")
    print (cc)
    n=input("请输入需要查询的车次:")
    print (n+"次车的出发站和终点站是:",cc.get(n))

程序运行结果如图4-4所示。

图4-4 例4.4的程序运行结果