自学python笔记10--字典

本文是自学Python笔记的第十部分,详细介绍了字典的特性、基本操作、字符串格式设置以及字典的方法,包括键值对、增删改查、clear、copy、fromkeys、get、items、pop和update等。同时,探讨了浅复制与深复制的区别,并展示了实际应用示例。
摘要由CSDN通过智能技术生成

自学python笔记10–字典

字典相关知识温习:
字典使用名称-内容进行数据的构建,在Python中分别对应着键(key)一值(value),习惯上称之为键值对。字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。

字典的特征总结如下:
1.字典中数据必须是以键值对的形式出现的;
2.逻辑上讲,键是不能重复的,而值可以重复;
3.字典中的键(key)是不可变的,也就是无法修改的;而值(value)是可变的,可修改的,可以是任何对象。

字典的一般书写形式:
在这里插入图片描述
例:

yyss={'BIDU':'Baidu','SINA':'Sina','YOKU':'Youku'}

dict()

item=[('name','aurora'),('age',42)]
d=dict(item)
print(d)
print(d['name'])

结果为:
在这里插入图片描述
也可以使用关键字实参来调用这个函数,可以写成如下形式:

d=dict(name='aurora',age=42)
print(d)
print(d['name'])

结果仍然为
在这里插入图片描述
一、基本的字典操作
字典的基本行为在很多方面都类似于序列。
1.len(d)返回字典d包含的项(键-值对)数。
2.d[k]返回与键k相关联的值。
3.d[k] = v将值v关联到键k。
4.del d[k]删除键为k的项。
5.k in d检查字典d是否包含键为k的项。
一个简单的应用:

# 一个将人名用作键的字典。每个人都用一个字典表示,
# 字典包含键'phone'和'addr',它们分别与电话号码和地址相关联
people = {
 'Alice': {
 'phone': '2341',
 'addr': 'Foo drive 23'
 },
 'Beth': {
 'phone': '9102',
 'addr': 'Bar street 42'
 },
'Cecil': {
 'phone': '3158',
 'addr': 'Baz avenue 90'
 }
}
# 电话号码和地址的描述性标签,供打印输出时使用
labels = {
 'phone': 'phone number',
 'addr': 'address'
}
name = input('Name: ')
# 要查找电话号码还是地址?
request = input('Phone number (p) or address (a)? ')
# 使用正确的键:
if request == 'p':
    key = 'phone'
if request == 'a':
    key = 'addr'
# 仅当名字是字典包含的键时才打印信息:
if name in people: print("{}'s {} is {}.".format(name, labels[key], people[name][key]))

结果为
在这里插入图片描述
labels[key], people[name][key]的使用中包含到了d[k]返回与键k相关联的值这一条。

二、将字符串格式设置功能于字典
在字典中包含各种信息,这样只需在格式字符串中提取所需的信息即可。为此,
必须使用format_map来指出你将通过一个映射来提供所需的信息。

phonebook={'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
print("Cecil's phone number is {Cecil}.".format_map(phonebook))

结果为:
在这里插入图片描述
三、字典方法
1.clear
方法clear删除所有的字典项,这种操作是就地执行的(就像list.sort一样),因此什么都不返回(或者说返回None)。

#clear
d={}
d['name']='aurora'
d['age']=19
print(d)
returned_valued=d.clear()
print(d)

结果为
在这里插入图片描述
1.2 字典的clear和赋值空字典的区别
代码1:

x = {}
y = x
x['key'] = 'value'
print(y)
x = {}
print(x)
print(y)

结果为:
在这里插入图片描述
代码2:

x = {}
y = x
x['key'] = 'value'
print(y)
x.clear()
print(x)
print(y)

结果为:
在这里插入图片描述
由代码1、2进行对比,x和y最初都指向同一个字典。通过将一个空字典赋给x来“清空”它。这对y没有任何影响,它依然指向原来的字典。但如果使用clear,这样y也将清空。

2.copy
2.1浅复制

#copy
x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
y=x.copy()
print(y)
y['username']='aurora'
x['machines'].remove('bar')
print(x)
print(y)
y['machines'].remove('foo')
print(x)
print(y)

执行y=x.copy()之后,y的情况
在这里插入图片描述
执行y['username']='aurora' x['machines'].remove('bar')之后,x,y分别为
在这里插入图片描述
在执行完y['machines'].remove('foo')之后,x,y分别为
在这里插入图片描述
这说明当替换副本中的值时,原件不受影响。
(在y的基础上修改元素的值,不影响x中该元素的值)
然而,如果修改副本中的值(就地修改而不是替换),原件也将发生变化。
(删除y中的元素,x中的元素也会受到影响)

2.2深复制

#deepcopy
from copy import deepcopy
d={}
d['name']=['aurora','peter']
c=d.copy()
dc=deepcopy(d)
d['name'].append('abcd')
print(c)
print(dc)

结果为:
在这里插入图片描述
故使用deepcopy不受原字典改变的影响。

3.fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。

#fromkeys
print(dict.fromkeys(['name','age']))
#可提供特定的值
print(dict.fromkeys(['name','age'],'(unknown)'))

结果为:
在这里插入图片描述
4.get
方法get为访问字典项提供了宽松的环境。通常,如果你试图访问字典中没有的项,将引发错误。但使用get来访问不存在的键时,没有引发异常,而是返回None。

#get
a={}
a['name']='aurora'
print(a.get('name'))

结果为:
在这里插入图片描述

# 一个使用get()的简单数据库
people = {
 'Alice': {
 'phone': '2341',
 'addr': 'Foo drive 23'
 },
 'Beth': {
 'phone': '9102',
 'addr': 'Bar street 42'
 },
'Cecil': {
 'phone': '3158',
 'addr': 'Baz avenue 90'
 }
}
# 电话号码和地址的描述性标签,供打印输出时使用
labels = {
 'phone': 'phone number',
 'addr': 'address'
}
name = input('Name: ')
# 要查找电话号码还是地址?
request = input('Phone number (p) or address (a)? ')
# 使用正确的键:
key = request # 如果request既不是'p'也不是'a' 
if request == 'p': key = 'phone' 
if request == 'a': key = 'addr'
  # 使用get提供默认值
person = people.get(name, {})
label = labels.get(key, key)
result = person.get(key, 'not available')
print("{}'s {} is {}.".format(name, label, result))

结果为:
在这里插入图片描述
在这里插入图片描述
5.items
方法items返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。字典项在列表中的排列顺序不确定。

#items
b= {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
print(b.items())

输出结果:
在这里插入图片描述
返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代。另外,你还可确定其长度以及对其执行成员资格检查。

6.pop
方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。

c={'x':1,'y':2}
print(c.pop('x'))
print(c)

结果为:
在这里插入图片描述
7.update
方法update使用一个字典中的项来更新另一个字典。

e={'title': 'Python Web Site','url': 'http://www.python.org','changed': 'Mar 14 22:09:15 MET 2016'}
f= {'title': 'Python Language Website'}
e.update(f)
print(e)

结果为:
在这里插入图片描述
对于通过参数提供的字典,将其项添加到当前字典中。如果当前字典包含键相同的项,就替换它。

小结
1.映射:映射让你能够使用任何不可变的对象(最常用的是字符串和元组)来标识其元素。
Python只有一种内置的映射类型,那就是字典。
2.将字符串格式设置功能用于字典:要对字典执行字符串格式设置操作,不能使用format
和命名参数,而必须使用format_map。
3.字典方法:字典有很多方法,这些方法的调用方式与列表和字符串的方法相同。

持续更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值