Python基础教程:字典(当索引不好用时)
一.定义与概念
1.字典是针对非序列集合而提供的一种数据类型
举例:检索学生信息。
“<键><值>对”。
键(即身份证号码) 值(即学生信息)。
“键值对”例子
姓名和电话号码
用户名和密码
国家名称和首都等。
通过任意键信息查找一组数据中值信息的过程叫映射,Python语言中通过字典实现映射。
Python语言中的字典可以通过大括号{ }建立,建立模式如下: {<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>} 其中,键和值通过冒号连接,不同键值对通过逗号隔开。 字典是键值对的无序可变集合。
字典中的每个元素包含两部分:键和值,向字典添加一个键的同时,必须为该键增添一个值。
字典中的键可以为任意不可变数据,比如整数、实数、复数、字符串、元组等等。
字典中的键不允许重复。
例
Dcountry={ "中国":"北京","美国": "华盛顿","法国":"巴黎"}
print (Dcountry)
#结果:
{'法国':'巴黎','美国':'华盛顿','中国': '北京'}
字典打印出来的顺序与创建之初的顺序不同,这不是错误。字典是集合类型的延续,各个元素并没有顺序之分。
字典主要的用法是查找与特定键相对应的值,通过索引符号来实现。
Dcountry["中国"] '北京'
一般来说,字典中键值对的访问模式如下,采用中括号格式: <值> = <字典变量>[<键>] 字典中对某个键值的修改可以通过中括号的访问和赋值实现:
Dcountry["中国"]='大北京'
print(Dcountry) {'中国': '大北京', '法国': '巴黎', '美国': '华盛顿'}
2.字典类型与序列类型的区别:
存取和访问方式不同
键的类型不同 序列类型只能用数字类型的键(下标) 字典类型可以用其他对象类型作键
排列方式不同 序列类型保持了元素的相对关系 而字典中的数据是无序排列的
映射方式不同 序列类型通过地址映射到值 字典类型通过键直接映射到值
二.字典的操作
1.创建于删除
使用=将一个字典赋值给一个变量
使用内置函数dict()利用已有数据创建字典
使用dict根据给定的键-值对创建字典 以给定内容为键,创建值为空的字典(fromkeys)
使用del删除整个字典
2.基本操作方法
函数和方法描述<d>.keys()
返回所有的键信息<d>.values()
返回所有的值信息<d>.items()
返回所有的键值对<d>.get(<key>,<default>)
键存在则返回相应值,否则返回默认值;键存在则返回相应值,同时删除键值对,<d>.pop(<key>,<default>)
否则返回默认值<d>.popitem()
随机从字典中取出一个键值对,以元组(key, value)形式返回<d>.clear()
删除所有的键值对del <d>[<key>]
删除字典中某一个键值对<key> in <d>
如果键在字典中返回True,否则返回False
3.元素的读取
以键作为下标可以读取字典元素,若键不存在则抛出异常
使用字典对象的get方法获取指定键对应的值,并且可以在键不存在的时候返回指定值。
使用字典对象的items方法可以返回字典的键、值对列表
使用字典对象的keys方法可以返回字典的键列表
使用字典对象的values方法可以返回字典的值列表
4.元素的添加与修改
当以指定键为下标为字典赋值时,若键存在,则可以修改该键的值;若不存在,则表示添加一个键、值对。
使用字典对象的update方法将另一个字典的键、值对添加到当前字典对象
使用del删除字典中指定键的元素
使用字典对象的clear方法来删除字典中所有元素
使用字典对象的pop方法删除并返回指定键的元素
使用字典对象的popitem方法删除并返回字典中的任意一个元素
5.字典元素的遍历
与其他组合类型一样,字典可以通过for…in语句对其元素进行遍历,基本语法结构如下:
for <变量名> in <字典名>: 语句块
for key in Dcountry:
print(key)
中国
美国
法国
遍历字典的键
key for key in dictionaryName.keys():
print(key)
遍历字典的值
value for value in dictionaryName.values():
print(value)
遍历字典的项
for item in dicitonaryName.items():
print(item)
遍历字典的键值对
key-value for key,value in dicitonaryName.items():
print(key, value)
字典是实现键值对映射的数据结构,请理解如下基本原则:
字典是一个键值对的集合,该集合以键为索引,一个键信息只对应一个值信息;
字典中元素以键为索引访问;
字典长度是可变的,可以通过对键信息赋值实现增加或修改键值对。
三.操作实例
1.首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import string
import random
x = string.ascii_letters
y = ''.join((random.choice(x) for i in range(1000)))
d = dict()
for ch in y:
d[ch] = d.get(ch,0)+1
dd = sorted(d.items(), key=lambda item:item[1], reverse=True)#排序
print(dd[:3])#打印出排名前三的
四.字典与json的异同
发现字典和web前端中的json有点像。接下来比较一下两者的异同。
字典结构:
json数据形式:
{
"studentInfo":
{
"id":123456,
"stu_name":"Dorra"
}
}
从形式上看,都是“Key:Value”的形式。
但是从本质上讲,字典是一种数据结构,而json是一种格式;字典有很多内置函数,有多种调用方法,而json是数据打包的一种格式,并不像字典具备操作性,并且是格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号,不能使用单引号,而且“key”必须使用边界符(双引号),但字典就无所谓了。
Python中提供了json.load()转换函数,方便json数据的调用。