购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4
字典

字典也是Python中的一个重要的序列结构,是字典是任意对象的无序集合。字典是以“键-值对”的形式来存储数据,通过键从字典中获取指定项,但不能通过索引来获取。

● 字典是无序的,各项是从左到右随机排序的,即保存在字典中的项没有特定的顺序。这样可以提高查找效率。

● 字典是可变的,并且可以任意嵌套。

● 字典中的键必须唯一,一个键只能对应一个值,若字典键重复赋值,后一个值将覆盖前一个值。

● 字典中的键必须是可哈希的对象,即不可变的数据类型。

● 字典中的值没有限制,可以是任何数据类型,不是必须唯一的。

3.4.1 字典的创建与删除

定义字典时,每个元素都包含两个部分:“键”和“值”。

创建字典时,在“键”和“值”之间使用冒号分隔,相邻两个元素使用逗号分隔,所有元素放在一对“{}”中,语法格式如下:

    dictionary={'key1':'value1','key2':'value2',…,'keyn':'valuen',}

参数说明:

● dictionary:表示字典名称。

● keyl,key2,…,keyn:表示元素的键,必须是唯一的,并且是不可变的数据类型,例如,可以是字符串、数字或者元组。

● valuel,value2,…,valuen:表示元素的值,可以是任何数据类型,不是必须唯一的。

【例3.38】创建一个保存通信录信息的字典。

    dictionary = {'Bob': '12345678', 'Lily': '12345679', 'Helen': '23456789'}
    print(dictionary)

执行结果如下:

    {'Lily': '12345679', 'Bob': '12345678', 'Helen': '23456789'}

同列表和元组一样,也可以创建空字典。在Python中,可以使用下面两种方法创建空字典:

    dictionary = {}
    或者
    dictionary = dict()

Python中的dict()方法除了可以创建一个空字典外,还可以通过已有数据快速创建字典,主要表现为以下两种形式:

1.通过映射函数创建字典

通过映射函数创建字典的语法如下:

    dictionary = dict(zip(list1,list2))

参数说明:

● dictionary:表示字典名称。

● zip()函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。如果想获取元组,可以将zip对象使用tuple()函数转换为元组;如果想获取列表,则可以使用list()函数将其转换为列表。

提示

在Python 2.x中,zip()函数返回的内容为包含元组的列表。

● listl:一个列表,用于指定要生成字典的键。

● list2:一个列表,用于指定要生成字典的值。如果listl和list2的长度不同,则取最短的列表长度。

【例3.39】通过映射函数创建字典。

    tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    print "tinydict['Name']: ", tinydict['Name']
    print "tinydict['Age']: ", tinydict['Age']

运行上面的代码,输出结果如下:

    tinydict['Name']:  Zara
    tinydict['Age']:  7
2.通过给定的“键-值对”创建字典

通过给定的“键-值对(key-value pair)”创建字典的语法如下:

    dictionary = dict(key1=value1, key2=value2,…, keyn=valuen)

参数说明:

● dictionary:表示字典名称。

● keyl,key2,…,keyn:表示元素的键,必须是唯一的,并且是不可变的数据类型,例如可以是字符串、数字或者元组。

● valuel,value2,…,valuen:表示元素的值,可以是任何数据类型,不是必须唯一的。

在Python中,还可以使用dict对象的fromkeys()方法创建值为空的字典,语法格式如下:

    dictionary = dict.fromkeys(list1)

参数说明:

● dictionary:表示字典名称。

● listl:作为字典的键的列表。

【例3.40】创建名为dict1的字典。

    dict1 = dict(name="Jing",age=20,university="DMU")

3.4.2 通过“键-值对”访问字典

在Python中,如果想输出字典的内容也是比较简单的,可以直接使用print()函数。但是,在使用字典时,很少直接输出它的内容,一般需要根据指定的键得到相应的结果。在Python中,访问字典的元素可以通过下标的方式实现,与列表和元组不同,这里的下标不是索引号,而是键。

【例3.41】通过键访问字典中的元素。

    dictionary = {'Bob': '12345678', 'Lily': '12345679', 'Helen': '23456789'}
    print(dictionary['Bob'])

执行结果如下:

    12345678

另外,在Python中推荐的方法是使用字典对象的get()方法获取指定键的值,其语法格式如下:

    dictionary.get(key[,default])

参数说明:

● dictionary:为字典对象,即要从中获取值的字典。

● key:为指定的键。

● default:为可选项,用于指定当指定的“键”不存在时,返回一个默认值,如果省略,则返回None。

【例3.42】使用字典对象的get()方法获取指定键的值。

    tinydict = {'Name': 'Runoob', 'Age': 27}
    print ("Age : %s" %  tinydict.get('Age'))
    # 没有设置 Sex,也没有设置默认的值,输出 None
    print ("Sex : %s" %  tinydict.get('Sex'))
    # 没有设置 Salary,输出默认的值  0.0
    print ('Salary: %s' % tinydict.get('Salary', 0.0))

运行上面的代码,输出结果如下:

    Age : 27
    Sex : None
    Salary: 0.0

3.4.3 遍历字典

字典是以“键-值对”的形式存储数据的,所以要获取存储数据时也需要通过这些“键-值对”进行获取。Python提供了遍历字典的方法,通过遍历可以获取字典中的全部“键-值对”。

使用字典对象的items()方法可以获取字典的“键-值对”列表,其语法格式如下:

    dictionary.items()

参数说明:

● dictionary:为字典对象。

● 返回值为可遍历的(键-值对)的元组列表。

● 想要获取到具体的“键-值对”,可以通过for循环遍历该元组列表。

【例3.43】使用for循环遍历字典列表。

    tinydict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao':
'www.taobao.com'}
    print "字典值 : %s" % tinydict.items()
    # 遍历字典列表
    for key,values in tinydict.items(): print key,values

运行上面的代码,输出结果如下:

    字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob',
'www.runoob.com')]
    Google www.google.com
    taobao www.taobao.com
    Runoob www.runoob.com
提示

在Python中,字典对象还提供了values()方法和keys()方法,用于返回字典的“值”列表和“键”列表,它们的使用方法同items()方法类似,也需要通过for循环遍历该字典列表,获取对应的值和键。

3.4.4 添加、修改和删除字典元素

由于字典是可变序列,所以可以随时在字典中添加“键-值对”。向字典中添加元素的语法格式如下:

    dictionary[key] = value

参数说明:

● dictionary:表示字典名称。

● key:表示要添加元素的键,必须是唯一的,并且是不可变的数据类型,例如可以是字符串、数字或者元组。

● value:表示元素的值,可以是任何数据类型,不是必须唯一的。

【例3.44】向字典中添加元素。

    tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
    tinydict ['hello'] = 'world'
    print (tinydict ['hello'])

运行上面的代码,输出结果如下:

    World

3.4.5 字典推导式

使用字典推导式可以快速生成一个字典,它的表现形式和列表推导式类似。

【例3.45】生成一个包含4个随机数的字典,其中字典的键使用数字表示。

    import random   # 导入random标准库
 
    randomdict = {i: random.randint(10, 100) for i in range(1, 5)}
    print("生成的字典为:", randomdict)

执行结果如下:

    生成的字典为: {1: 76, 2: 17, 3: 94, 4: 49}

另外,使用字典推导式也可以根据列表生成字典。

【例3.46】使用字典推导式根据列表生成字典。

    listdemo = ['C语言','c.biancheng.net']
    # 列表中各字符串值为键,各字符串的长度为值,组成键值对
    newdict = {key:len(key) for key in listdemo}
    print(newdict)

运行上面的代码,输出结果如下: t46CyMSg2NZ4LykTIeyD7GnPmz8biE5oO2HceU5eqjeR6jF/rOuAA+JvQxvTYu5l

    {'C语言': 6, 'c.biancheng.net': 15}
点击中间区域
呼出菜单
上一章
目录
下一章
×