原创小白系列第 7 篇
字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串、数字、列表等。字典是由关键字和值两部分组成,也就是 key 和 value,中间用冒号分隔。这种结构类似于新华字典,字典中每一个字都有一个对应的解释,具体语法如下:
语法:
字典名 = { 关键字1:值,关键字2:值,关键字3:值}
每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。可以有任意多个键值对
值可以取任何数据类型,但键必须是不可变的,如字符串,数或元组。
例子:
#构建一个字典,记录各宫嫔妃的年薪银子
name_dictionary = {'魏璎珞':300,'皇后':1000,'皇贵妃':800,'贵妃':600,'斌':200}
print(name_dictionary)
print('字典的数据类型表示是:',type(name_dictionary))
{'魏璎珞': 300, '皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200}
字典的数据类型表示是:
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。两个重要的点需要记住:
1.不允许同一个键出现两次:创建时如果同一个键被赋值两次,后一个值会被记住。
例子
# 定义两个同样的关键字Namedict = {'Name': 'Python', 'Age': 7, 'Name': 'Java'}print("dict['Name']: ", dict['Name'])
dict['Name']: ManniJava
2. 键必须不可变:所以可以用数,字符串或元组充当,所以用列表就不行
例子
# 关键字Name为列表dict = {['Name']:'Python', 'Age': 7};print ("dict['Name']: ", dict['Name'])
File "/Users/yoni.ma/PycharmProjects/seven_days_python/Forth_day_strcure/dict_p.py", line 22, in
dict['Name']: Java
dict = {['Name']:'Python', 'Age': 7};
TypeError: unhashable type: 'list'
字典在python中的类型表示是 。当查看到变量的类型是dict,则可以对其进行字典的操作。常见的字典操作是访问字典、遍历字典等。这些操作在实际项目中经常被使用到,比如excel文件读入内存以后,按照字典的方法存放。然后对其增加或删除值。
1.访问字典
访问字典也就是获取关键字对应的值,方法是指定字典名和放在方括号内的关键字,具体如下。获取后的值可以赋值给变量。
语法:
变量名 = 字典名[关键字]
例子
# 访问字典
weiyingluo = name_dictionary['魏璎珞']
print(f'魏璎珞的年薪是:{weiyingluo}两')
魏璎珞的年薪是:300两
2.添加键值对
字典是一种可变的数据结构,可以随时添加或者删除其中的键值对。其中添加键值的方法是,指定字典名、用方括号括起的键和相关的值,具体如下。
语法:
字典名[关键字名] = 值
例子
# 增加贵人和常在的年薪银子
print(f'原来的后宫年薪字典是:{name_dictionary}')
name_dictionary['贵人'] = 100
name_dictionary['常在'] = 50
print(F'增加键值后的后宫年薪字典变成:{name_dictionary}')
原来的后宫年薪字典是:{'魏璎珞': 300, '皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200}
增加键值后的后宫年薪字典变成:{'魏璎珞': 300, '皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200, '贵人': 100, '常在': 50}
3.修改键值对
如果字典中的值不是我们想要的,可以通过修改的方法达到。以此指定字典名、用方括号括起的键以及与该键相对应的新值。
语法:
字典名[关键字名] = 新的值
例子
# 修改字典的值,比如修改常在的年薪为70两
print('常在原来的年薪是{} 两'.format(name_dictionary['常在']))
name_dictionary['常在']= 70
change_changzai = name_dictionary['常在']
print(f'常在修改后的年薪是{change_changzai} 两')
常在原来的年薪是50 两
常在修改后的年薪是70 两
4删除键值对
如果字典中的键值对不再需要,我们可以彻底删除。Python使用的是del语句,必须要指定要删除的字典名和关键字。注意是永久删除
语法:
del 字典名[关键字]
例子
#删除字典中的键值对,比如删除常在
del name_dictionary['常在']
print(f'删除常在后的后宫嫔妃年薪字典变成:{name_dictionary}')
删除常在后的后宫嫔妃年薪字典变成:{'魏璎珞': 300, '皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200, '贵人': 100}
如果我们还需要用到被删除的键值对,则我们使用pop(‘键的名字’)方法。该方法是删除字典给定键所对应的值,并且返回该值。
print('原来的字典是:', name_dictionary)# 使用pop方法删除魏璎珞name_pop = name_dictionary.pop('魏璎珞')# 使用删除后的值print('魏璎珞的年薪是:',name_pop)print('使用pop方法删除后的字典是:',name_dictionary)
原来的字典是: {'魏璎珞': 300, '皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200, '贵人': 100}
魏璎珞的年薪是: 300
使用pop方法删除后的字典是: {'皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200, '贵人': 100}
除了pop()方法以外, Python中还有一个popitem()方法。它可以随机删除字典中的一对(一般删除末尾一对),并且可以被后续的程序使用。我们经常用此方法逐个删除字典中的所有键值对。
# 随机删除字典中的一对pop_name = name_dictionary.popitem()print('使用popitem删除的是:',pop_name)print('随机删除字典中一对键值对后:',name_dictionary)pop2_name = name_dictionary.popitem()print('再次使用popitem删除的是:',pop2_name)print('再次随机删除字典中一对键值对后:',name_dictionary)
使用popitem删除的是:('贵人', 100)
随机删除字典中一对键值对后: {'皇后': 1000, '皇贵妃': 800, '贵妃': 600, '斌': 200}
再次使用popitem删除的是: ('斌', 200)
再次随机删除字典中一对键值对后: {'皇后': 1000, '皇贵妃': 800, '贵妃': 600}
如果需要删除所有的键值对,我们可以使用clear()方法清空所有的数据。但是需要注意del语句是删除字典,此时打印删除后的字典则出错。两者是有区别的。
# clear()方法清除字典中的所有数据print('原来字典的长度是:',len(name_dictionary))name_dictionary.clear()print('使用clear清除字典中的所有内容:',name_dictionary)print('清空以后字典的长度是:',len(name_dictionary))# 使用del删除字典del name_dictionary# 字典已经被删除,则再次打印则出错:name 'name_dictionary' is not definedprint(name_dictionary)
原来字典的长度是: 3
使用clear清除字典中的所有内容: {}
清空以后字典的长度是: 0
Traceback (most recent call last):
File "/Users/seven_days_python/Forth_day_strcure/dict_p.py", line 139, in
print(name_dictionary)
NameError: name 'name_dictionary' is not defined
5.创建空字典
在实际项目中,我们可能不知道字典中存放的内容是什么。这时,我们可以采用从空的字典开始动态创建,也就是在程序运行的时候添加具体的内容。
常见的使用场景是:第一个:需要用户输入数据存储为字典;第二个是自动生成大量的键值对,比如爬虫,爬取豆瓣电影的排名信息。我们可以把排名放入空的字典中,然后每次爬取一个电影,添加一个对应的键值对。
例子
# 从空的字典开始创建
douban_movies = {} #定义空的字典
douban_movies['排名'] = 1
douban_movies['片名'] = '霸王别姬'
douban_movies['主演'] = '张国荣、张丰毅、巩俐'
douban_movies['导演'] = '陈凯歌'
print('从空的列表中构建字典:',douban_movies)
从空的列表中构建字典: {'排名': 1, '片名': '霸王别姬', '主演': '张国荣、张丰毅、巩俐', '导演': '陈凯歌'}
以上内容摘自《零基础轻松学 Python》
零基础学 Python,来这里