python基础教程(第三版)学习笔记(四)

第四章 字典
字典一种可通过名称来访问其各个值的数据结构。这种数据结构称为映射。字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。
4.1 字典的用途
i表示棋盘的状态,其中每个键都是由坐标组成的元组;
ii存储文件修改时间,其中的键为文件名;
iii数字电话/地址簿。
4.2 创建和使用字典
创建字典的格式为一对大括号{}和冒号:
{键名:值}
4.2.1 函数dict
可使用函数dict从其他映射(如其他字典)或键-值对序列创建字典。其实dict是字典的构造函数(关于构造函数以后说)。
'''

item=[('name','张玉'),('李四',43)]
d=dict(item)
print(d)

'''

{'name': '张玉', '李四': 43}


------------------
(program exited with code: 0)

请按任意键继续. . .


还可以使用关键字实参来调用这个函数,如下所示:
'''

d=dict(name='张玉','李四'=42)
print(d)

'''

{'name': '张玉', '李四': 42}


------------------
(program exited with code: 0)

请按任意键继续. . .


4.2.2基本的字典操作
字典的基本行为在很多方面都类似于序列。
i   len(d)返回字典d;包含的项(键值对)数。
ii  d[k]返回与键k相关联的值。
iii d[k] = v将值v关联到键k。
iv  del d[k]删除键为k的项。
v   k in d检查字典d是否包含键为k的项。
虽然字典和列表有多个相同之处,但也有一些重要的不同之处。
键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组。
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。
然而,如果不使用append或其他类似的方法,就不能给列表中没有的元素赋值。
成员资格:表达式k in d(其中d是一个字典)查找的是键而不是值,而表达式v in l(其中l是一个列表)查找的是值而不是索引。这看似不太一致,但你习惯后就会觉得相当自然。毕竟如果字典包含指定的键,检查相应的值就很容易。
字典的定义{键:值}例如:
'''

results={"张三":68,"李四":94,"王五":88}
print(results,type(results))

'''

{'张三': 68, '李四': 94, '王五': 88} <class 'dict'>


------------------
(program exited with code: 0)

请按任意键继续. . .


字典的键是唯一的不能重复。
'''

result={'张三':68,'李四':94,'王五':88,'张三':77}
print(result,type(result))

'''

{'张三': 77, '李四': 94, '王五': 88} <class 'dict'>


------------------
(program exited with code: 0)

请按任意键继续. . .


可以用format设置字典的格式。
'''

print("张三的成绩是{张三}".format_map(results))

'''

张三的成绩是68


------------------
(program exited with code: 0)

请按任意键继续. . .


像这样使用字典时,可指定任意数量的转换说明符,条件是所有的字段名都是包含在字典中的键。在模板系统中,这种字符串格式设置方式很有用(下面的示例使用的是HTML)
'''

template='''
<html>
    <head>
        <title>{title}</title>
    </head>
    <body>
        <h1>{text}</h1>
        <p>{title}</p>
    <body>
</html>

'''
date={'title':'Hello world','text':'欢迎您:'}
print(template.format_map(date))

'''

<html>
        <head>
                <title>Hello world</title>
        </head>
        <body>
                <h1>欢迎您:</h1>
                <p>Hello world</p>
        <body>
</html>



------------------
(program exited with code: 0)

请按任意键继续. . .

4.2.3 字典的方法
1、clear
删除所有的字典项,这种操作是就地执行的(就像list.sort一样),因此什么都不返回(或者说返回None)。
clear和赋予空字典的区别:
'''

x={}
y=x
x['键']='值'    
print(x)
print(y)
x={}
print("x={}后的字典")
print(x)
print(y)
print("下面用clear:")
a={}
b=a
print(a)
print(b)
print('clear后的字典:')
print(a)
print(b)

'''

{'键': '值'}
{'键': '值'}
x={}后的字典
{}
{'键': '值'}
下面用clear:
{}
{}
clear后的字典:
{}
{}


------------------
(program exited with code: 0)

请按任意键继续. . .


2、copy
返回一个新字典,其包含的键-值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而非副本)。
一种办法是执行深复制,即同时复制值及其包含的所有值,等等。为此,可使用模块copy中的deepcopy函数。
3、fromkeys
创建一个新字典,其中包含指定的键,且每个键(注意:用[]括起来,否则会出现意想不到的结果)对应的值都是None。
'''

print({}.fromkeys(["姓名","年龄"]))

'''

{'姓名': None, '年龄': None}


------------------
(program exited with code: 0)

请按任意键继续. . .


这个示例首先创建了一个空字典,再对其调用方法fromkeys来创建另一个字典,这显得有点多余。你可以不这样做,而是直接对dict(dict是所有字典所属的类型。)调用方法fromkeys。
'''

print(dict.fromkeys(["姓名","年龄"]))

'''

{'姓名': None, '年龄': None}
{'姓名': None, '年龄': None}


------------------
(program exited with code: 0)

请按任意键继续. . .


4、get
访问字典中没有的项。
'''

print(results.get('张三'))

'''

68


------------------
(program exited with code: 0)

请按任意键继续. . .


没有被访问的项返回None,不会报错。
5、items
返回一个包含所有字典项的列表,其中每个元素都为(key, value)元组。字典项在列表中的排列顺序不确定。
'''

print(results.items())

'''

dict_items([('张三', 68), ('李四', 94), ('王五', 88)])


------------------
(program exited with code: 0)

请按任意键继续. . .


6、key
返回指定字典中的键。
7、values
返回指定字典中的值。
8、pop
弹出字典中指定键的元素。
'''

c={"a":1,"b":2,"c":3}
print(c)
print(c.pop("b"))
print(c)

'''

{'a': 1, 'b': 2, 'c': 3}
2
{'a': 1, 'c': 3}


------------------
(program exited with code: 0)

请按任意键继续. . .


9、popitem
随机地弹出字典的项。
10、setdefault
有点像get,因为它也获取与指定键相关联的值,但当在字典不包含指定的键时,setdefault将在字典中添加指定的键-值对,并返回None。
'''

print(c.setdefault("d"))
print(c)

'''

None
{'a': 1, 'c': 3, 'd': None}


------------------
(program exited with code: 0)

请按任意键继续. . .


11、uptate
使用一个字典中的项来更新另一个字典。对于通过参数提供的字典,将其项添加到当前字典中。如果当前字典包含键相同的项,就替换它。
(待续)

猜你喜欢

转载自blog.csdn.net/micorjun/article/details/83377275