05. 万恶之源-基本数据类型(dict)
本节主要内容:
1. 字典的简单介绍
2. 字典增删改查和其他操作
3. 字典的嵌套
⼀一. 字典的简单介绍
字典(dict)是python中唯⼀一的⼀一个映射类型.他是以{ }括起来的键值对组成. 在dict中key是
唯⼀一的. 在保存的时候, 根据key来计算出⼀一个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,
如果你搞不懂什什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的,
那么可哈希就意味着不可变. 这个是为了了能准确的计算内存地址⽽而规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool
不可哈希(可变)的数据类型: list, dict, set
语法 :
{key1: value1, key2: value2....}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

# 合法
dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅
哥', '美⼥女女'], (1, 2, 3): '麻花藤'}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['stu'])
print(dic[(1, 2, 3)])
# 不不合法
# dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不不能作为key
# dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不不能作为key
dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不不能作为key

dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表
不是连续的. 所以不能进⾏行行切片⼯工作. 它只能通过key来获取dict中的数据

⼆二. 字典的增删改查和其他相关操作
1. 增加

dic = {}
dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀一个key-value的组
合进dict
dic['age'] = 18
print(dic)
# 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
dic.setdefault('李李嘉诚') # 也可以往⾥里里⾯面设置值.
dic.setdefault("李李嘉诚", "房地产") # 如果dict中已经存在了了. 那么setdefault将不不会
起作⽤用
print(dic)

2. 删除

ret = dic.pop("jay")
print(ret)
del dic["jay"]
print(dic)
# 随机删除.
ret = dic.popitem()
# 清空字典中的所有内容
dic.clear()

3. 修改

dic = {"id": 123, "name": 'sylar', "age": 18}
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
dic.update(dic1) # 把dic1中的内容更更新到dic中. 如果key重名. 则修改替换. 如果不不存
在key, 则新增.
print(dic)
print(dic1)

4. 查询

print(dic['name'])
# print(dic['sylar']) # 报错
print(dic.get("ok"))
print(dic.get("sylar")) # None
print(dic.get("sylar", "⽜牛B")) # ⽜牛B

5. 其他相关操作

dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐比"}
print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不不⽤用管它是什什么.当
成list来⽤用就⾏行行
for key in dic.keys():
print(key)
print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐比']) ⼀一样. 也当
list来⽤用
for value in dic.values():
print(value)
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age',
18), ('ok', '科⽐比')]) 这个东⻄西也是list. 只不不过list中装的是tuple
for key, value in dic.items(): # ?? 这个是解构
print(key, value)
# 解构
a, b = 1, 2
print(a, b)
(c, d) = 3, 4
print(c, d)
e, f = [1, 2, 3] # 解构的时候注意数量量必须匹配
print(e, f)

三. 字典的嵌套

# 字典的嵌套
dic1 = {
"name": "汪峰",
"age": 18,
"wife": {
"name": '章⼦子怡',
"age": 28
},
"children": ['第⼀一个⽑毛孩⼦子', '第⼆二个⽑毛孩⼦子'],
"desc": '峰哥不不会告我吧. 没关系. 我想上头条的'
}
print(dic1.get("wife").get("name"))

print(dic1.get("children"))
print(dic1.get("children")[1])

练习:

dic1 = {
'name':['alex',2,3,5],
'job':'teacher',
'oldboy':{'alex':['python1','python2',100]}
}
1,将name对应的列列表追加⼀一个元素’wusir’。
2,将name对应的列列表中的alex⾸首字⺟母⼤大写。
3,oldboy对应的字典加⼀一个键值对’⽼老老男孩’,’linux’。
4,将oldboy对应的字典中的alex对应的列列表中的python2删除。

dic1 = {
'name':['alex',2,3,5],
'job':'teacher',
'oldboy':{'alex':['python1','python2',100]}
}
dic1["name"].append("wusir")
dic1["name"][0]=dic1["name"][0].capitalize()

dic1['oldboy']["老老老男孩"]="linux"
dic1["oldboy"].setdefault("老老老男孩","linux")

dic1['oldboy']["alex"].pop(1)
dic1['oldboy']["alex"].remove("python2")
del dic1['oldboy']["alex"][1]
del dic1['oldboy']["alex"][-2]

print(dic1)

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])
# 元祖 tuple,不可修改的列表,只允许查询,用法与list类似  第一层元素不可修改
#b   "alex" 不可修改
#c tu变量中的"k2"对应的值是["age", "name"] 可以修改
tu[1][2]["k2"].append("Seven")
print(tu[1][2]["k2"])
#d  tu变量中的"k3"对应的值是元祖  不可修改
print(tu)
2, 字典dic,dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}a.请循环输出所有的key
for el in dic:
    print(el)
b.请循环输出所有的value
for el in dic:
    print(dic[el])
c. 请循环输出所有的key和value
for el in dic:
    print(el,dic[el])
d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
dic.setdefault("k4","v4")
print(dic)
e. 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
dic["k1"]=["alex"]
print(dic)
dic["k1"]="alex"print(dic)
f. 请在k3对应的值中追加一个元素 44,输出修改后的字典
dic["k3"].append(44)
print(dic)
g. 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
dic["k3"].insert(0,18)
print(dic)

3,av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

a,给此 ["很多免费的,世界最大的","质量一般"]列表第二个位置插入一个  元素:'量很大'。
    b,将此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表的 "全部收费,屌丝请绕过" 删除。
    c,在此 ["质量很高,真的很高","全部收费,屌丝请绕过"]列表中添加"金老板最喜欢这个"。
    d,将此["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]列表的 "verygood"全部变成大写。

e,给'大陆' 对应的字典添加一个键值对 '1048' :['一天就封了']

f,删除此"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"]键值对。

g,给此["全部免费,真好,好人一生平安","服务器在国外,慢"]列表的第一个元素,加上一句话:'可以爬下来'

av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","verygood"]
    },
    "大陆":{
        ":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}
av_catalog["欧美"]["www.youporn.com"].append("量很大")
av_catalog["欧美"]["x-art.com"].pop()
av_catalog["欧美"]["x-art.com"].append("金老板最喜欢这个")
av_catalog["日韩"]["tokyo-hot"][1]=av_catalog["日韩"]["tokyo-hot"][1].upper()
av_catalog["]=['一天就封了']
av_catalog[",'一天就封了')
av_catalog["欧美"].pop("letmedothistoyou.com") 

del av_catalog["欧美"]["letmedothistoyou.com"]
"][0]+("可以爬下来") print(av_catalog)

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

dic={}
str="k:1|k1:2|k2:3|k3:4"
lis=[]
lis=str.split("|")
for i in range(len(lis)):
    dic.setdefault(lis[i].split(":")[0],lis[i].split(":")[1])
print(dic)

5、元素分类

有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

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

dic={}
li= [11,22,33,44,55,66,77,88,99,90]
lis=[]
lis1=[]
for i in range(len(li)):
    if li[i]>66:
        lis.append(li[i])
        dic.setdefault("k1",lis)
        # print(li[i])
    else:
        lis1.append(li[i])
        dic.setdefault("k2", lis1)
        # print(li[i])
print(dic)

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}, ]
shopping_car=[]
for i in range(len(goods)):
    print("编号",i+1,":",goods[i]["name"],goods[i]["price"])
while 1:
    choice = input("请输入你想要购买的商品序号:")
    if choice.isdigit():
        choice=int(choice)
        if (choice)>0 and (choice)<len(goods)+1:
            print(goods[int(choice) - 1]["name"], goods[int(choice) - 1]["price"])
            shopping_car.append(choice)
        else:
            print("输入有误,并重新输入")
            continue
            # choice = input("请重新输入你想要购买的商品序号:")
            # print(goods[choice - 1]["name"], goods[choice - 1]["price"])
    elif (str(choice)).upper()=="Q":
        print("你已经购买了以下商品")
        for i in range(len(shopping_car)):
            print(goods[shopping_car[i] - 1]["name"], goods[shopping_car[i] - 1]["price"])
        break
    else:
        continue

day 05 万恶之源-基本数据类型(dict)的更多相关文章

  1. 万恶之源 - Python数据类型二

    列表 列表的介绍  列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各 ...

  2. 万恶之源-python基本数据类型

    万恶之源-基本数据类型(dict) 本节主要内容: 字典的简单介绍 字典增删改查和其他操作 3. 字典的嵌套 ⼀一. 字典的简单介绍 字典(dict)是python中唯⼀一的⼀一个映射类型.他是以{ ...

  3. 基本数据类型(dict)

    05. 基本数据类型(dict)内容:1. 字典的简单介绍2. 字典增删改查和其他操作3. 字典的嵌套⼀. 字典的简单介绍字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对 ...

  4. 1.python真的是万恶之源么?(初识python)

    python真的是万恶之源么? 计算机基础及puthon了解 1.计算机基础知识 cpu : 相当于人类大脑,运算和处理问题 内存 : 临时存储数据,单点就消失,4G,8G,16G,32G 硬盘 : ...

  5. 万恶之源 - Python基础数据类型三

    字典 字典的简单介绍 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是 唯⼀的.在保存的时候, 根据key来计算出⼀个内存地址. 然后将key ...

  6. 万恶之源 - Python基础数据类型一

    整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是:  -2**31-2**31-1,即-2147483648-2147483647 在64 ...

  7. 万恶之源 - Python模块一

    序列化 我们今天学习下序列化,什么是序列化呢? 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 为什么要有序列化模块: 比如,我们在python代码中计算的一个数据需要给另外一段程序使用 ...

  8. redis源码之dict

    大家都知道redis默认是16个db,但是这些db底层的设计结构是什么样的呢? 我们来简单的看一下源码,重要的字段都有所注释 typedef struct redisDb { dict *dict; ...

  9. Python - 基础数据类型 dict 字典

    字典简介 字典在 Python 里面是非常重要的数据类型,而且很常用 字典是以关键字(键)为索引,关键字(键)可以是任意不可变类型 字典由键和对应值成对组成,字典中所有的键值对放在 { } 中间,每一 ...

随机推荐

  1. CF 833 B. The Bakery

    B. The Bakery http://codeforces.com/contest/833/problem/B 题意: 将一个长度为n的序列分成k份,每份的cost为不同的数的个数,求最大cost ...

  2. cogs696 longest prefix

    cogs696 longest prefix 原题链接 IOI1996原题? 其实这题我不会. map+string+手动氧气大法好 //就是这么皮(滑稽 Code // It is made by ...

  3. Sublime Text 3安装完美的Vim支持,ActualVim/NeoVim

    很多IDE和编辑器都有Vim插件用于支持Vim模式,但大多数都有些问题,拿我一直用的Idea来说,它的vim在ctrl+v后,选择多行的行前插入,如果这几行中有空行,它不会把空格算在内,所以最终是会少 ...

  4. python-全栈开发-前方高能-内置函数

    python_day_14 13. 前方高能-内置函数 ⼀. 本节主要内容: 1. 内置函数 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. ...

  5. 二、Django快速安装

    一.安装Python 作为一个Python Web框架,Django依赖Python.从Django适用于哪些版本的Python可以获取更多信息.较新版本的Python内置一个轻量级的数据库SQLit ...

  6. Unity 编辑器扩展 Chapter2—Gizmos

    二. 使用Gizoms绘制网格及矩阵转换使用 1. 创建Leve类,作为场景控制类: using UnityEngine; //使用namespace方便脚本管理 namespace RunAndJu ...

  7. 1.5 JAVA的高并发编程

    一.多线程的基本知识 1.1进程与线程的介绍(上个博客1.4中已经详细介绍进程和线程) 程序运行时在内存中分配自己独立的运行空间,就是进程 线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的 ...

  8. Wacom将在CES 2015上发布全新旗舰版Cintiq

    Cintiq 27QHD和Cintiq 27QHD touch拥有宽大的工作表面,以及令人惊喜的屏幕笔触和颜色性能. 2015年1月6日,Wacom发布了Cintiq 27QHD和Cintiq 27Q ...

  9. 联邦快递 IE和IP的区别 Fedex IE VS Fedex IP

    什么是FedEx IP? FedEx IP指的是联邦快递优先服务,时效比较快些,相对来说价格也比普通的高一些. 什么是FedEx IE? FedEx IE指的是联邦快递经济服务,时效与FedEx IP ...

  10. New York Comic Con 2013 - 2013年纽约动漫展

    New York Comic Con - 2013年纽约动漫展 New York Comic Con is the largest pop culture event on the East Coas ...