Python基础-字典

字典的创建

字典是存放一系列键值对的数据结构,对标js中的对象,也对标java中的map。

现实中的例子就是通讯录,根据这个人的名字就可以得到他的电话号码。

 

定义字典的写法跟js中定义对象是一样的,两边花括号,中间key:value,区别在于js定义对象的时候key可以不用引号。

person = {"Bob":"13113113111","Mary":"13113113112","Mark":"13113113113"}
print(person)

打印结果:
{'Bob': '13113113111', 'Mary': '13113113112', 'Mark': '13113113113'}

 

我们还可以使用dict函数来创建字典:

person = dict(name="小明",age=18)
print(person)

打印结果:
{'name': '小明', 'age': 18}

 

它还允许我们将其他序列转化成字典

item = [('name','小明'),('age',18)]
person = dict(item)
print(person)

打印结果:
{'name': '小明', 'age': 18}

 

字典的基本操作

访问字典中的值

字典中的元素都是key-value的形式存放的,所以要访问某一个value,就要用到对应的key,写法是用中括号:

person = {'name' : '小明', 'age' : 18}
print(person['name'])

打印结果:
小明

 

你还可以使用get方法来访问值:

person = {'name' : '小明', 'age' : 18}
print(person.get('name'))

打印结果:
小明

 

他们的区别在于,使用get方法如果访问一个不存在的key,它会返回None,而使用中括号访问一个不存在的key,会报错。

 

还有一个有意思的方法 setdefault,它的作用是获取一个key对应的value,如果这个key存在,那么获取值,如果不存在,那么获取默认值,并往字典中插入这个key。

person = {'name' : '小明', 'age' : 18}
value = person.setdefault('sex','未知')
print(value)
print(person)

打印结果:
未知
{'name': '小明', 'age': 18, 'sex': '未知'}

 

获取字典长度

len方法几乎可以对任何数据进行长度计算,字典中每一对key-value就算做一个长度

person = {'name' : '小明', 'age' : 18}
print(len(person))

打印结果:
2

 

添加键值对

字典是动态结构,可以自由添加键值对。

person = {'name' : '小明', 'age' : 18}
person['sex'] = ''
print(person)

打印结果:
{'name': '小明', 'age': 18, 'sex': '男'}

 

修改字典中的值

修改和添加一样的,只不过如果你的key在字典中不存在,那么就添加,如果存在,那么就修改。

person = {'name' : '小明', 'age' : 18}
person['age'] = 15
print(person)

打印结果:
{'name': '小明', 'age': 15}

 

删除键值对

删除字典中的元素用del关键字,跟删除列表中的元素是一样的用法。

person = {'name' : '小明', 'age' : 18}
del person['age']
print(person)

打印结果:
{'name': '小明'}

 

检查key是否存在

person = {'name' : '小明', 'age' : 18}
if('name' in person):
    print('这个key是存在的')
else:
    print('这个key是不存在的')

打印结果:
这个key是存在的

 

字典常用方法

清空字典内容 clear()

clear方法用于删除字典中的所有元素,是直接对原字典执行,方法本身不会有返回值。

person = {'name' : '小明', 'age' : 18}
person.clear()
print(person)

打印结果:
{}

 

浅复制 copy()

copy方法返回一个新字典,包含的键值对跟原来的字典完全相同。但是它只是拷贝字典中的一级对象,对于第二级对象,它只是引用。

我们实验一下,让字典里面存列表,拷贝之后再修改列表中的值

x = {'name' : '小明', 'age' : [11,12,13]}
y = x.copy()
y['name'] = '大明'
y['age'][1] = 100
print(x)
print(y)

打印结果:
{'name': '小明', 'age': [11, 100, 13]}
{'name': '大明', 'age': [11, 100, 13]}

 

深复制 deepcopy()

from copy import deepcopy
x = {'name' : '小明', 'age' : [11,12,13]}
y = deepcopy(x)
y['name'] = '大明'
y['age'][1] = 100
print(x)
print(y)

打印结果:
{'name': '小明', 'age': [11, 12, 13]}
{'name': '大明', 'age': [11, 100, 13]}

 

获取所有键 keys()

keys方法返回的是一个迭代器,可以用list方法将它转换成列表

person = {'name' : '小明', 'age' : 18}
print(list(person.keys()))

打印结果:
['name', 'age']

 

所谓的迭代器,就是可以直接用来循环的对象

person = {'name' : '小明', 'age' : 18}
for item in person.keys():
    print(item)

打印结果:
name
age

 

获取所有值 values()

person = {'name' : '小明', 'age' : 18}
print(list(person.values()))

打印结果:
['小明', 18]

 

弹出字典中的元素 pop()

弹出的意思其实就是 获取+删除 两个操作的组合。

person = {'name' : '小明', 'age' : 18}
value = person.pop('age')
print(value)
print(person)

打印结果:
18
{'name': '小明'}

 

遍历字典 items()

items方法返回一个字典视图的迭代器,包含了字典中所有的键值对,每个键值对都是以元组的形式存在

person = {'name' : '小明', 'age' : 18}
y = person.items()
for item in y:
    print(item)

打印结果:
('name', '小明')
('age', 18)

 

如果你想进一步取里面的数据,也可以这么写:

person = {'name' : '小明', 'age' : 18}
y = person.items()
for k,v in y:
    print(k + '---' + str(v))

打印结果:
name---小明
age---18

 

posted @ 2020-06-22 18:52  不该相遇在秋天  阅读(362)  评论(0编辑  收藏  举报