python基础数据类型三
来源:互联网 发布:好看的输入法软件 编辑:程序博客网 时间:2024/06/06 03:18
补充变量的内存存储
字典
概念
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据,python对key进行哈希函数运算,根据计算结果决定value的存储地址,所以字典是无序的(python3.5之前是无序的,在python3.6以后 dict 是有序的 ),且key必须是可哈希的
可哈希 :不可变类型
int
str
tuple
bool
不可哈希:可变类型
list
- dict
理解
字典是通过key-value的方法,键值是一一对应的 可以通过键找到值,字典的 key 是不可以重复的
在内存中的存储:
字典创建时会开辟一定空间存放key ,当存入key-value 的时候 会根据key进行哈希函数运算,计算出value的内存地址。
方法
动态创建字典——fromkeys
>>> {}.fromkeys(['k1','k2'],[]){'k1': [], 'k2': []}s
增
基础方法
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic['work':'student']>>> dic{'name':'charmNight', 'age':18, 'sex':'n', 'work':'student'}
setdefault( k, d=None)
有返回值:返回value
只能添加不能进行修改
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.setdefault('work')>>> dic{'name': 'charmNight', 'age': 18, 'sex': 'n', 'work': None}# 可以发现setdefault() 默认value 为 None>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.setdefault('work', 'student')student>>> dicdic = {'name':'charmNight', 'age':18, 'sex':'n', 'work':'student'}>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.setdefault('name','Over')charmNight>>> dicdic = {'name':'charmNight', 'age':18, 'sex':'n'}# 可以发现 setdefault()只能添加不能进行修改
拓展
setdefault() 其实是先进行了一句 get()方法
删
pop(k,[,d])
根据key删除
有返回值 如果删除成功返回 删除的key对应的值
如果删除失败, 返回d 的内容 , 如果d 不写则报错
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.pop('name')charmNight>>> dic{'age':18, 'sex':'n'}>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.pop('asd')Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 'asd'>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.pop('asd', None)None
popitem()
随机删除 python3.6测试 一般删除最后一个
有返回值:返回的是一个元祖 (key,value)
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.popitem()('sex','n')
del
用法一
del dic[‘key’] 删除key 与 value 删除失败报错
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> del dic['name']>>> dic{'age':18, 'sex':'n'}>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> del dic['name123']Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: 'name123'
用法二
del dic 删除整个字典
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> del dic
clear
清空字典
>>> dic = {'name':'charmNight', 'age':18, 'sex':'n'}>>> dic.clear()>>> dic{}
改
update(E=None, **F)
通过update增加 ,如果有重复的key 则进行修改
dic.update(dic2) 是dic 中如果没有 dic2中的元素则增加 在dic中重新开辟内存空间 如果有 就是 直接指向dic2 的value的内存地址
dic = {'name':'charm','age':18,'sex':'n'}dic2 = {'name':'Game', 'str':'asd'}dic.update(dic2)print(dic){'name': 'Game', 'age': 18, 'sex': 'n', 'str': 'asd'}
拓展
当dic2修改的时候 dic2[‘name123’]
查
get()
# 查询如果找到则返回value 如果找不到 默认为None# print(dic.get('name1'))# print(dic.get('name1','Over'))# 查找 如果找到返回value 找不到则报错# print(dic['name'])
keys()、values()、items()
print(dic.keys(),type(dic.keys())) # dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>print(dic.values(),type(dic.values())) # dict_values(['charm', 18, 'n']) <class 'dict_values'>print(dic.items(),type(dic.items())) # dict_items([('name', 'charm'), ('age', 18), ('sex', 'n')]) <class 'dict_items'>for i in dic: print(i)for i in dic.keys(): print(i)for i in dic.values(): print(i)for k,v in dic.items(): print(k,v)
补充
.items() 方法其实是找的keys 然后又根据keys找了一遍values
但是效率不如 .keys()高
for i in dic.keys(): print(dic[i])的效率大于for k,v in dic.items(): print(k,v)
应用
字典中的值可以是任意内容
def demo1(): print('这是第一个demo')def demo2(): print('这是第二个demo')dic = {}.fromkeys(['1','2'],None)print(dic)dic['1'] = demo1()dic['2'] = demo2()for i in range(10): if i in dic.keys(): print(i) else: pass
- python基础数据类型三
- python基础学习三:数据类型
- python基础学习三——混合数据类型
- python基础01-数据类型
- Python基础1--数据类型
- python基础_数据类型
- Python基础 基本数据类型
- Python基础-数据类型
- Python基础之数据类型
- python基础学习-数据类型
- python基础之数据类型
- Python基础数据类型
- python基础----变量,数据类型
- Python基础之数据类型
- Python基础之数据类型
- python基础--基本数据类型
- python基础数据类型一
- python基础数据类型二
- Day08 --代码块 继承 重写 this和super final关键字
- 第二节matlab的变量命名、数据类型和几个常用命令
- ShaderForge-波光铠甲
- earlysuspend、autosleep以及wakeup_count三种休眠机制的分析和比较
- 事务操作
- python基础数据类型三
- speedment 入门教程
- Hadoop数据传输工具sqoop
- 不再谷满谷,坑满坑,看苏宁库存架构转变
- 三种方法处理VS(Visual Studio)2017闪退问题.个人感觉都不是根本解决问题。
- EasyDarwin服务器搭建
- 如何用nodejs实现前后端传值
- fastDFS的配置nginx的http请求
- exynos4412启动流程