字典

Why:咱们目前已经学习到的容器型数据类型只有list,那么list够用?他有什么缺点呢?

1. 列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢。

2. 列表只能按照顺序存储,数据与数据之间关联性不强。

所以针对于上的缺点,说咱们需要引入另一种容器型的数据类型,解决上面的问题,这就需要dict字典。

what:

数据类型可以按照多种角度进行分类,就跟咱们人一样,人按照地域可以划分分为亚洲人,欧洲人,美洲人等,但是按照肤色又可以分为白种人,黄种人,黑种人,等等,数据类型可以按照不同的角度进行分类,先给大家按照可变与不可变的数据类型的分类:

不可变(可哈希)的数据类型:int,str,bool,tuple。

可变(不可哈希)的数据类型:list,dict,set。

字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的:

Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。

Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。

 在Python3.5版本(包括此版本)之前,字典是无序的。

 在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)。

 当然,字典也有缺点:他的缺点就是内存消耗巨大。

  字典查询之所以快的解释:(了解)

字典的查询速度非常快,简单解释一下原因:字典的键值对会存在一个散列表(稀疏数组)这样的空间中,每一个单位称作一个表元,表元里面记录着key:value,如果你想要找到这个key对应的值,先要对这个key进行hash获取一串数字咱们简称为门牌号(非内存地址),然后通过门牌号,确定表元,对比查询的key与被锁定的key是否相同,如果相同,将值返回,如果不同,报错。(这里只是简单的说一下过程,其实还是比较复杂的。),下面我已图形举例:

'''
#数据类型划分:可变数据类型,不可变数据类型
不可变数据类型:元组,bool int str 可哈希
可变数据类型:list,dict set 不可哈希
dict key 必须是不可变数据类型,可哈希,
value:任意数据类型。
dict 优点:二分查找去查询
存储大量的关系型数据
特点:无序的
#55
#20
#60
#40
#50
#55
'''
dic = {
'name':['大猛','小孟'],
'py9':[{'num':71, 'avg_age':18,},
{'num': 71, 'avg_age': 18, },
{'num': 71, 'avg_age': 18, },
],
True:1,
(1,2,3):'wuyiyi',
2:'二哥',
}
print(dic)
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',}
#增:
dic1['high'] = 185 #没有键值对,添加
dic1['age'] = 16 #如果有键,则值覆盖 dic1.setdefault('weight') # 有键值对,不做任何改变,没有才添加。
dic1.setdefault('weight',150)
dic1.setdefault('name','二哥')
print(dic1) #删
print(dic1.pop('age')) # 有返回删除键对应的值,按键去删除
print(dic1.pop('二哥',None)) # 可设置没有键时返回值,不然会出现报错
print(dic1) print(dic1.popitem()) # 随机删除 有返回值(元组)里面是删除的键值。 3.6+默认按最后一个删除
# print(dic1) del dic1['name']
print(dic1)
#del dic1
#print(dic1) # dic1.clear() #清空字典 #改 update
dic1['age'] = 16 dic = {"name":"jin","age":18,"sex":"male"}
dic2 = {"name":"alex","weight":75}
dic2.update(dic) #把dic覆盖添加到dic2 print(dic)
print(dic2)
dic1 = {'age': 18, 'name': 'jin', 'sex': 'male',} #查
print(dic1.keys(),type(dic1.keys())) # dict_keys(['age', 'name', 'sex']) <class 'dict_keys'>
print(dic1.values()) # dict_values([18, 'jin', 'male'])
print(dic1.items()) # dict_items([('age', 18), ('name', 'jin'), ('sex', 'male')]) for i in dic1: # 默认打出键值
print(i) for i in dic1.keys():
print(i) for i in dic1.values():
print(i) a,b = 1,2
print(a,b) a = 1
b = 2
print(id(a), id(b))
a,b = b,a #a,b 值互换
print(id(a), id(b))
print(a,b)
a,b = [1,2],[2,3]
print(a, b)
a,b = (1,2)
print(a,b)
for k,v in dic1.items():
print(k,v)
for k,v in dic1.items():
print(k,v) v1 = dic1['name']
print(v1) #v2 = dic1['name1'] # 报错
#print(v2) print(dic1.get('name1','没有这个键')) dic = {
'name':['alex','wusir','taibai'],
'py9':{
'time':'',
'learn_money':19800,
'addr':'CBD',
},
'age':21
}
dic['age'] = 56
print(dic['name'])
dic['name'].append('ritian')
l = [1,2,'wusir']
l[2] = l[2].upper()
dic['name'][1] = dic['name'][1].upper()
print(dic) #female : 6
dic['py9']['female'] = 6
print(dic) # fhdklah123rfdj12fdjsl3 ' 123 12 13'
info = input('>>>').strip()
for i in info:
if i.isalpha():
info = info.replace(i," ")
l = info.split() #['342', '34']
print(len(l))
# 14,补充代码(从已有的代码下面继续写):(6分)
# 有如下值li= [11,22,33,44,55,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
# li = [11,22,33,44,55,77,88,99,90]
# result = {}
# for row in li:
# ......
# li = [11,22,33,44,55,77,88,99,90]
# result = {'k1':[],'k2':[]}
# for i in li:
# if i > 66:
# result['k1'].append(i)
# elif i == 66:
# pass
# else:
# result['k2'].append(i)
# print(result) # 或者(有的话,直接添加,没有的话,创建一个在添加)
# li = [11,22,33,44,55,77,88,99,90]
# result = {}
# for row in li:
# if row > 66:
# if 'key1' not in result:
# result['key1'] = []
# result['key1'].append(row)
# if row < 66:
# if 'key2' not in result:
# result['key2'] = []
# result['key2'].append(row)
# print(result)

别人能做的事,你能做的更好。

Python-dict-12的更多相关文章

  1. Think Python - Chapter 12 Tuples

    12.1 Tuples are immutable(元组是不可变的)A tuple is a sequence of values. The values can be any type, and t ...

  2. Python dict operation introduce

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: d = ...

  3. 十二. Python基础(12)--生成器

    十二. Python基础(12)--生成器 1 ● 可迭代对象(iterable) An object capable of returning its members one at a time. ...

  4. python & dict & switch

    python & dict & switch python 中是没用switch语句的,这应该是体现python大道至简的思想,python中一般多用字典来代替switch来实现. # ...

  5. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  6. 小白学 Python(12):基础数据结构(字典)(上)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. Python dict(或对象)与json之间的互相转化

    Python dict(或对象)与json之间的互相转化 原文转载自 1.JSON:JavaScript 对象表示法,是轻量级的文本数据交换格式,独立于语言,平台 2.JSON 语法规则 数据在名称/ ...

  8. Python dict() 函数

    Python dict() 函数  Python 内置函数 描述 dict() 函数用于创建一个字典. 语法 dict 语法: class dict(**kwarg) class dict(mappi ...

  9. python进阶12 Redis

    python进阶12 Redis 一.概念 #redis是一种nosql(not only sql)数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,还提 ...

  10. python day 12: 选课系统

    目录 python day 12 1. 通过类来创建选课系统 1.1 类库models.py 2. 配置文件setting.py 3. administrator.py 4. student.py p ...

随机推荐

  1. Logstash收集nginx访问日志和错误日志

    1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...

  2. windows 2003 IIS 设置 FTP被动模式

    IIS FTP 将21端口更改为xx123端口: 更改数据端口: cd c:/Inetpub/AdminScripts cscript.exe adsutil.vbs set /MSFTPSVC/Pa ...

  3. Python进阶(二)

    高阶函数 1.把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 2.Python内建了map( )和reduce( ) 函数 map()函数接收两个参数,一个是函数 ...

  4. CanalSharp.AspNetCore v0.0.4-支持输出到MongoDB

    一.多样输出支持 CanalSharp.AspNetCore是一个基于CanalSharp的适用于ASP.NET Core的一个后台任务组件,它可以随着ASP.NET Core实例的启动而启动,目前采 ...

  5. [bug] 验证selenium的显式和隐式等待而发现的一个低级错误

    隐式等待:如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步.按照这说法举了个例子为啥不会按照预期执行了,难不成是这个定义有问题(~~~~~直接否定不是定义的问题,相信它 ...

  6. web机试

    测试: <html><style> </style><title>Demo</title> <body><div > ...

  7. 多个Activity和Intent

    Intent是Android应用程序组件之一,在Android系统当中表示一种意图,Intent中包含了一组信息: 最重要的内容是action(动作)和data(数据) Component name ...

  8. Java:传值还是传引用?

    这是一个Java的经典问题,大部分人从C,C++语言入门,C语言有三种传递方式:值传递,地址传递和引用传递.详细的对C语言指针,引用的我个人的理解,见链接. Java所有操作都是传值操作!都是传值操作 ...

  9. 解决jqueryeasyUI dialog 弹出窗体超出浏览器,导致不能关闭的bug

    使用panel的onMove事件攻克了panel,dialog以及window组件在被拖动时,会超出浏览器边界而无法拖回的情况. 当窗体被拖出浏览器有边界时.$(document).width();会 ...

  10. UVA816-Abbott's Revenge(搜索进阶)

    Problem UVA816-Abbott's Revenge Accept: 1010  Submit: 10466 Time Limit: 3000 mSec Problem Descriptio ...