python123组合数据类型_Python的组合数据类型-字典
字典
字典 ( dictionary ) 采用 0 个或多个键值对(key-value)的形式存储数据。Python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以是无序组合数据类型,且 key 必须是可哈希的。可哈希的 key 必须是不可变类型,如:数字、字符串、元组。
字典是除列表以外 Python 之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是可变的,因此可以对其进行数据项的添加或移除操作。
注意: 从 Python 3.6 开始,字典的 Key 将会保留插入或声明时候的顺序,但并不是可以被排序的那种顺序。从 3.7 开始这成了正式的 Python 语言特性,3.6 改进的字典更节省内存,运行效率差不多,有一个 “副作用” 就是字典变成有序的了。
字典的创建
dict 数据类型可以作为函数调用:dict()——不带参数将返回一个空字典,带一个映射类型参数将返回以该参数为基础的字典。比如该参数本身为字典,则返回该参数的浅拷贝。使用序列型参数也是可以的,前提是序列中的每个数据项本身是一个包含两个对象的序列,其中第一个用作键,第二个用作值。
字典也可以使用花括号 {} 创建——空的 {} 会创建空字典,非空的 {} 必须包含一个或多个逗号分隔的项,其中每一项都包含一个键、一个字面意义的冒号以及一个值:
1
2
3
4
5
6
7
8dic1 = {
'name' : 'Tom',
'age' : '18',
'sex' : 'male',
'hobby': 'Jerry'
}
dic1={'name':'Tom','age':18,'sex':'male','hobby':'Jerry'}
字典的操作
字典支持内置的 len() 函数,也可以使用 in 与 not in 对其键进行快速的成员关系测试
方法语法
表述
d.clear()
将字典d清空
d.copy()
返回字典d的浅拷贝
d.fromkeys(s,v)
返回一个字典,该字典的键为序列s的项,值为None或v(r如果给定了参数v)
d.get(k)
返回字典d中键k对应的值,如果k不在d中就返回None
d.get(k,v)
返回字典d中键k对应的值,如果k不在d中就返回预设值v
d.items()
返回字典d中所有 键-值 对的视图
d.keys()
返回字典d中所有的键的视图
d.values()
返回字典d中所有值的视图
d.pop(k)
移除键为k的项并返回键k对应的值,如果k不在d中就产生KeyError异常
d.pop(k,v)
移除键为k的项并返回键k对应的值,如果k不在d中就返回预设值v
d.popitem()
随机移除并返回字典d中的任意一个 键-值 对,如果d为空就产生KeyError异常
d.setdefault(k,v)
与d.get()类似,不同之处在于,如果键k不在d中就插入一个键为k的新值,其值为None或预设值v(如果给定了参数v)
d.update(a)
如果a中的键-值 对不存在d中就添加到d,如果a中的键在d中,就将a中的键对应的值替换掉d中键对应的值。a可以是字典,也可以是关键字参数
示例
增加元素,字典的键是独一无二的,因此如果向字典中添加一个键-值项,并且该键与字典中现存的某个键相同,那么实际的效果是使用新值替换该键的现值。
1
2
3
4
5
6
7
8
9
10
11
12dic1 = {}
dic1['name'] = 'Tom'
dic1['age'] = 18
print(dic1) # {'name': 'Tom', 'age': 18}
a = dic1.setdefault('name', 'Jerry')
b = dic1.setdefault('age', 22)
# 如果 key 存在则不做更改,返回对应字典中相应的 key 对应的 value
# 如果 key 不存在则在字典中增加新的 key-value 对,并返回相应的 value
print(a, b) # Tom 18
print(dic1) # {'name': 'Tom', 'age': 18}
查找元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17dic1 = {'name': 'Tom', 'age': 18, 'sex': 'male', 'hobby': 'Jerry'}
print(dic1['name']) # Tom
print(dic1.get('age', False)) # 18
print(dic1.get('son', 'little jerry')) # little jerry
print(dic1.get('ages', False)) # False
# 指定的键对应的值不存在,则使用指定的默认值,否则返回实际的值
print(list(dic1.keys())) # ['name', 'age', 'sex', 'hobby']
# 查看 key 的列表
print(list(dic1.values())) # ['Tom', 18, 'male', 'Jerry']
# 查看 value 的列表
print(list(dic1.items()))
# [('name', 'Tom'), ('age', 18), ('sex', 'male'), ('hobby', 'Jerry')]
# 查看所有的 key-value 对
修改数据
1
2
3
4
5
6
7
8
9
10
11
12
13dic1 = {'name': 'Tom', 'age': 18, 'sex': 'male', 'hobby': 'Jerry'}
print(dic1)
# {'name': 'Tom', 'age': 18, 'sex': 'male', 'hobby': 'Jerry'}
dic1['name'] = 'Jerry'
print(dic1)
# {'name': 'Jerry', 'age': 18, 'sex': 'male', 'hobby': 'Jerry'}
dic2 = {'sex': 'male', 'hobby': 'girl', 'age': 36}
dic1.update(dic2)
# 如果两个字典中存在相同的 key ,则在使用 update 时将会更新相应的 key 对应的 value ,否则将 key-value 对加入字典
print(dic1)
# {'name': 'Jerry', 'age': 36, 'sex': 'male', 'hobby': 'girl'}
删除
1
2
3
4
5
6
7
8
9
10
11
12
13dic1 = {'name': 'Tom', 'age': 18, 'sex': 'male', 'hobby': 'Jerry'}
# 删除指定的 key-value 对
del dic1['name']
dic1.pop('age') # 删除并返回该 key-value 的值
dic1.popitem() # 随机删除某组 key-value 对,并以元组方式返回值
# 清空整个字典
dic1.clear()
# 删除整个字典
del dic1
其他操作:
dict.fromkeys
1
2
3
4
5
6
7d1 = dict.fromkeys(['host1', 'host2', 'host3'], 'Mac')
print(d1)
# {'host1': 'Mac', 'host2': 'Mac', 'host3': 'Mac'}
d1['host2'] = 'abc'
print(d1)
# {'host1': 'Mac', 'host2': 'abc', 'host3': 'Mac'}
字典的嵌套
1
2
3
4
5
6
7province_city = {
'河北': {
'石家庄': ['长安区', '桥东区', '桥西区', '新华区', '井陉矿区', '裕华区', '井陉县', '正定县', '栾城县', '行唐县', '灵寿县', '高邑县', '深泽县', '赞皇县', '无极县', '平山县', '元氏县', '赵县', '辛集市', '藁城市', '晋州市', '新乐市', '鹿泉市', '其他'],
'唐山': ['路南区', '路北区', '古冶区', '开平区', '丰南区', '丰润区', '滦县', '滦南县', '乐亭县', '迁西县', '玉田县', '唐海县', '遵化市', '迁安市', ' 曹妃甸区', '其他'],
'秦皇岛': ['海港区', '山海关区', '北戴河区', '青龙满族自治县', '昌黎县', '抚宁县', '卢龙县', '其他']
}
}
sorted(dict) : 返回一个有序的包含字典所有 key 的列表 。
1
2
3
4
5
6
7
8
9dic = {5: '555', 2: '666', 4: '444'}
print(sorted(dic))
# [2, 4, 5]
print(sorted(dic.values()))
# ['444', '555', '666']
print(sorted(dic.items()))
# [(2, '666'), (4, '444'), (5, '555')]
字典的遍历
字典的 itmes 指的是键值对,在遍历的时候存在一个转换过程,因此如果数据量大的情况下效率比较低,不建议采用这种方法迭代,而建议使用 for k in dic: 的方法遍历。
1
2
3
4
5
6
7
8
9dic5={'name': 'tom', 'age': 18}
for key in dic5:
print(key,dic5[key])
for items in dic5.items():
print(items)
for keys,values in dic5.items():
print(keys,values)
判断字典中有没有某个 key
要判断字典中是否有某个键 k,一般使用 dic.get('k') 的方法来实现。
1
2
3
4
5
6
7
8
9
10>>>dic = {'name': 'Jerry', 'sex': 'male'}
>>>dic.get('name')
'Jerry'
>>>if dic.get('name'):
... print('"name" is in dict dic')
...else:
... print('"name" is not in dict dic')
...
"name" is in dict dic
>>>
但是如果字典中的键 k 所对应的值是 None 的时候就会出现严重的问题,这时候就会认为没有这个键 k。例如:
1
2
3
4
5
6
7
8
9>>>dic = {'name': 'Jerry', 'sex': 'male', 'hobby': None}
>>>dic.get('hobby')
>>>if dic.get('hobby'):
... print('"hobby" is in dict dic')
...else:
... print('"hobby" is not in dict dic')
...
"hobby" is not in dict dic
>>>
为了避免这种情况影响到程序的判断,应该使用成员判断操作符 in 的方法。
1
2>>>"hobby" in dic
True
但是多数情况下除了判断字典中是否有对应的键,还有可能需要操作键所对应的值。所以,使用 for k in dic: 的方法遍历字典是最为合适的。
1
2
3
4
5
6
7
8
9>>>dic = {'name': 'Jerry', 'sex': 'male', 'hobby': None}
>>>for k in dic:
... if dic[k]:
... pass
... else:
... dic[k] = 'study'
...
>>>dic
{'name': 'Jerry', 'sex': 'male', 'hobby': 'study'}
python123组合数据类型_Python的组合数据类型-字典相关推荐
- python语言数据类型_Python中的数据类型 | 萧小寒
摘要 Python3中提供有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 在这些数据类型中, ...
- python容器数据类型_python collections 容器数据类型
这个模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择. 创建命名元组子类的工厂函数 类似列表(list)的容器,实现了在两端 ...
- python的数据类型_Python支持哪些数据类型
Python基本数据类型一般分为:数字.字符串.列表.元组.字典.集合这六种基本数据类型. 数字数字类型是不可更改的对象.对变量改变数字值就是生成/创建新的对象.Python支持多种数字类型: 整型( ...
- python中什么是主要数据类型_python中基本数据类型是什么
python中基本数据类型是什么,变量,整型,类型,赋值,等号 python中基本数据类型是什么 易采站长站,站长之家为您整理了python中基本数据类型是什么的相关内容. python中基本数据类型 ...
- python变量和数据类型_Python变量和数据类型简介
变量(Variable)可以看成一个小箱子,专门用来"盛装"程序中的数据.每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据. 从底层看,程序中的数据最终都要放到内存 ...
- 内置python数据类型_python基础之数据类型及内置方法
一.数字类型 1.整型int:用来记录年龄.等级.号码等 int()可以接收数字和纯数字组成的字符串参数,不能接收浮点数的字符串. 当参数为浮点数时,函数会返回参数的整数部分.当参数是整数字符串时,函 ...
- python语言中包含的标准数据类型_python 六大标准数据类型
Number(int float bool complex) #int整型(正整数0 负整数) intvar = 256 print(intvar) #type获取一个值的类型 res = type( ...
- python测验3基本数据类型_Python 3 基本数据类型
Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的 ...
- python支持哪些数据类型_python有什么数据类型
python基本数据类型 python中的变量不需要声明.每个变量在使用前必须赋值,变量赋值后该变量才会被创建. 在python中,变量就是变量,它不会有类型,代码中提到的"类型" ...
最新文章
- mybatis对mapper.xml的解析(三)
- 在ASP.NET MVC5中使用特性路由
- Java 设计模式之观察者模式
- Spring Caching集成Ehcache
- TIME_WAIT状态的一些总结
- 总线接口与计算机通信
- django 1.8 官方文档翻译: 3-1-3 Django 的快捷函数
- 苹果iPad mini 6更多细节曝光:全面屏加持 搭载A14/A15芯片
- mysql的批量更新的语法,MySql 批量更新语法
- oracle 物料属性批次过期,物料批次特性值
- 大数据数学基础 python描述下载_正版 大数据数学基础(Python语言描述)Python 大数据 数学 高职-计算机-大数据技术...
- 3.5 Java经典垃圾收集器介绍
- mysql innodb 分区表_InnoDB的分区表
- 电池测试系统连接服务器失败,电池测试系统服务器的设计与应用
- 云计算机ppt模板,云服务云技术云计算PPT模板
- 【Java-网络编程】一对一聊天系统的实现
- Jenkins 设置镜像_在k8s上安装Jenkins及常见问题
- VUE前端删除和批量删除
- Fbx File Format Identifier
- 固态硬盘中的数据该怎么恢复
热门文章
- 程序员Mac常用软件之效率工具
- DEEPNOVA 技术荟系列公开课回顾:释放海量数据价值,尽显数据智能之美
- 在线协作平台「蓝湖」完成5亿元C轮融资,多元化产品布局提升产品研发效率...
- 经纬张颖「炮轰」扫码点餐;淘宝特价版给拼多多送芒果;Firefox 87.0 发布|极客头条...
- 老程序员也搞不定的 4 个巨坑!
- Unity发布四款新产品,加速本土化技术研发
- Java 8 的这个新特性,用起来真的很爽!
- 网易内部倡导用昵称代替哥姐总等称呼;TCL大股东误操作卖出500万股;Ant Design 4.6.2 发布| 极客头条
- 疫情防控,开发者集结出战!
- 如何将 Python 的一个类方法变为多个方法?