一、字典

为什么学字典:

列表的缺点:

1.列表如果存储的数据比较多,那么他的查询速度相对慢。

2.列表存储的数据关联性不强。

字典是什么:

Python基础数据类型之一:字典。

Python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以逗号隔开的。

{‘name’:’太白金星’,’age’:18,’sex’:’man’}

Ps:

数据类型的划分:

容器与非容器的划分:

容器型数据类型:list,tuple,dict,set.

非容器型数据类型:int str bool

可变与不可变划分:

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

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

字典是以键值对形式存储的,

键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。

值:任意数据类型,对象。

字典可以存储大量的键值对数据,

Python3.5包括3.5之前:字典是无序的。

Python3.6之后,字典是按初始顺序进行排列。

字典的优点:

  1. 字典存储大量的关系型数据。
  2. 字典的查询速度非常快。

二、字典的使用

增:

直接增:dic[‘hight’]=176-----à有则覆盖,无则添加。

考虑增:dic.setdefault(‘weight’,160)----à有则不变,无则添加

删:

按照键删除掉键值对:dic.pop(‘name’)-----à如果不设置返回值:没有找到会报错。设置返回值为:dic.pop(‘name’,’NULL’)

清空:dic.clear()

Del

改:

Dic.update(car=’逍遥’,money=1300)

Dic2.update(dic)把dic的内容添加到dic2中

查:

  1. print(dic[‘age’])
  2. print(dic.get(’age’)) 没有的话默认返回none,可以设置返回值。

其他:

分别赋值:a,b=(1,2)

Print(1,2)

Dic.items() 获取所有的键值对

Dic.value()获取值

Dic.keys()获取键

字典的嵌套:

1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。

2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。

3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。

4,给barry对应的小字典增加一个键值对: weight: 160

练习:

1.有如下变量(tu是个元祖),请实现要求的功能

tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])

a. 讲述元祖的特性

b. 请问tu变量中的第⼀个元素 "alex" 是否可被修改?

c. 请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在 其中添加⼀个元素 "Seven"

d. 请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其 中添加⼀个元素 "Seven"

tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11, 22, 33)}, 44])

a.元组默认不可修改,只可查询,读取。

b.tu变量中的第一个元素'alex'不可被修改,因为元组中的元素不可修改,但是元组中元素的元素可以被修改。

c.是列表类型,可以被修改。
a = tu[1][2]['k2']
a.append('Seven')
tu[1][2]['k2'] = a
print(tu)

d.元组类型,不可以被修改。

2.字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}

dic = {'k1': "v1", "k2": "v2", "k3": [11, 22, 33]}
1.请循环输出所有的key
print(dic.keys())

2.请循环输出所有的value
print(dic.values())

3.请循环输出所有的key和value
print(dic.items())

4.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
dic.setdefault('k4','v4')
print(dic)

5.请在修改字典中"k1"对应的值为"alex",输出修改后的字典
dic['k1'] = 'alex'
print(dic)

6.请在k3对应的值中追加一个元素44,输出修改后的字典
dic['k3'].append(44)
print(dic)

7.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic['k3'].insert(0,18)
print(dic)

3.如下:

a.给此 ["很多免费的,世界最⼤的","质量⼀般"]列表第二个位置插⼊⼀个 元素:'量很⼤'。
a=av_catalog['欧美']['www.太白.com'].insert(1,'量很大')
print(av_catalog)

b.将此["质量很⾼,真的很⾼","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
av_catalog['欧美']['hao222.com'].pop(1)
print(av_catalog)

c.将此["质量怎样不清楚,个⼈已经不喜欢⽇韩范了","verygood"]列表的 "verygood"全部 变成⼤写。
av_catalog['日韩']['tokyo-hot'][1] = av_catalog['日韩']['tokyo-hot'][1].upper()
print(av_catalog)

d.给 ' :['⼀天就封了']
av_catalog[',['一天就封了'])
print(av_catalog)

e.删除这个键值对:"oldboy.com":["多是自拍,高质量图片很多","资源不多,更新慢"]
av_catalog['欧美'].pop('oldboy.com')
print(av_catalog)

f.给此["全部免费,真好,好⼈⼀⽣平安","服务器在国外,慢"]列表的第⼀个元素,加上 ⼀句话:'可以爬下来'
av_catalog['][0]+'可以爬下来'
print(av_catalog)

4.有字符串"k: 1|k1 :2|k2:3 |k3 :4" 处理成字典 {'k':1,'k1':2....} (升级题)

a = 'k: 1|k1 :2|k2:3  |k3 :4'
l = {}
a = a.replace(' ', '').split('|')
for i in range(0, len(a)):
    a[i] = a[i].split(':')
    l.setdefault(a[i][0], int(a[i][1]))
print(l)

5.元素分类

有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有⼤于 66 的值保存⾄字典的

第⼀个key中,将⼩于 66 的值保存⾄第⼆个key的值中。

即:{'k1':⼤于66的所有值列表,'k2': ⼩于66的所有值列表}

l = {}
a = []
b = []
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
for i in li:
    if i > 66:
        a.append(i)
    elif i < 66:
        b.append(i)
l.setdefault('k1', a)
l.setdefault('k2', b)
print(l)

6.输出商品列表,⽤户输⼊序号,显示⽤户选中的商品

商品列表:goods = [{"name": "电脑", "price": 1999},         {"name": "⿏标", "price": 10},         {"name": "游艇", "price": 20},         {"name": "美⼥", "price": 998}, ]

要求:

1:⻚⾯显示 序号 + 商品名称 + 商品价格,如: 1 电脑 1999 2 ⿏标 10 …。

2:⽤户输⼊选择的商品序号,然后打印商品名称及商品价格。

3:如果⽤户输⼊的商品序号有误,则提示输⼊有误,并重新输⼊。

4:⽤户输⼊Q或者q,退出程序。

goods = [{"name": "电脑", "price": 1999},
         {"name": "⿏标", "price": 10},
         {"name": "游艇", "price": 20},
         {"name": "美⼥", "price": 998}, ]

# 1.⻚⾯显示 序号 + 商品名称 + 商品价格
time = 0
for i in goods:
    time += 1
    print(time, i['name'], i['price'])
# 2.⽤户输⼊选择的商品序号,然后打印商品名称及商品价格
while True:
    i = input('请用户输入序号:')
    if i == 'Q' or i=='q':
        break
    a=int(i)
    if 0 < a < 5:
        print(goods[a - 1]['name'], goods[a - 1]['price'])
    else:
        print('用户输入的商品序号有误,请重新输入!')

19-3-6Python中字典的解释、使用、嵌套的更多相关文章

  1. Python2 中字典实现的分析【翻译】

    在这片文章中会介绍 Python2 中字典的实现,Hash 冲突的解决方法以及在 C 语言中 Python 字典的具体结构,并分析了数据插入和删除的过程.翻译自python-dictionary-im ...

  2. python中字典的陷阱

    把字典与列表组合,如 i=20 s=[]#定义一个空列表 b={'d':i}#定义一个字典 while i>0: i=i-1 b['d']=i#更新字典的值 s.append(b) print( ...

  3. 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释

    一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...

  4. 课程笔记:——javascript中的预解释2

    in:检测某一个属性是否属于这个对象(既可以检测私有的属性,也可以检测公有的属性) --> attr in obj 1.不管条件是否成立,在预解释的时候,判断体中的带var和function的都 ...

  5. OC中如何把数组中字典的数据转换成URL?

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

  6. 在C#代码中应用Log4Net 中配置文件的解释

    一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...

  7. [转]Log4Net中配置文件的解释

    FROM:http://www.cnblogs.com/kissazi2/p/3392605.html 一个完整的配置文件的例子如下所示 <log4net> <!-- 错误日志类-- ...

  8. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  9. C#中泛型的解释(object,list,var,dynamic的区别)

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的 ...

随机推荐

  1. 转动的八卦图纯css实现

      这类的东西网上一搜就是大把的,看着比较空旷的博客,所以自己也来写一个. <!DOCTYPE html> <html> <head> <meta chars ...

  2. 浅谈用于WEBGIS开发最重要的4个HTML5特性

    WebGIS是GIS与Internet相结合的产物,一般Internet的开发手段都可用于WEBGIS的开发,比较流行的有Javascript.FLash,到现在应该说市面上的WEBGIS产品和具有的 ...

  3. 个体商户POS机遭遇禁刷 职业养卡人称自有对策

    “套现猛于虎也”,这对于信用卡业而言无异于一大命门,信用卡套现金额的规模如同滚雪球般愈演愈烈.记者昨日采访银行业内了解到,虽然为防套现将根据规定关闭个体商户POS机刷信用卡的功能,但职业“养卡人”不以 ...

  4. Java初学者 编译能通过,但显示有错误,并且不会自动弹出方法的解决方法。

    因为使用了 @Data注解,关于注解的作用尚未深入理解,此处先做一个记录. 解决方法是,添加lombok插件

  5. GTID复制的搭建和问题处理

    首先看一下什么是GTID: GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号. GTID实际上是由UUID+TID组成的.其中UUID是一个M ...

  6. windows下安装jmeter

    windows下安装jmeter post by rocdk890 / 2012-8-19 16:08 Sunday windows技术 发表评论 JMeter是Apache软件基金会的产品,用于对静 ...

  7. [问题记录]libpomelo工程调整编译链接错误

    1. 描述: 如下图所示,出现链接错误.那么链接问题一般也就两块设置: (1)包含路径Additional Library Directories (2)lib库的包含Additional Depen ...

  8. Redis设计与实现读后感

    看了一下时间,现在是2018年8月22日14:28,看完最后一页内容之后,我简短的停留了一下,任思绪翻飞. redis设计与实现大概看了有12天左右,12天前,我的心里很乱,整个人都处于一种焦虑不安的 ...

  9. python StringIO&BytesIO

    StringIO StringIO就是在内存中读写str 要把str写入StringIO,先创建一个StringIO >>> from io import StringIO>& ...

  10. 【深入理解JAVA虚拟机】第三部分.虚拟机执行子系统.2.虚拟机类加载机制

    1.概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验. 转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 2.类加载顺序 类从被加载到虚拟 ...