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
原创粉丝点击