字典:

1、列表如果存储大量数据,查询速度相对慢一些

2、列表存储的数据,一般没有什么关联性

针对以上原因,python提供了一个基础数据类型,dict 字典

数据类型的分类 :

  容器型数据类型:list, tupel,dict,set

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

  

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

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

{‘name’:‘alex’} 以键值对形式存储的数据类型

  1、 字典的键必须是不可变的数据类型,唯一的,不重复。  重复则后面的覆盖之前的

    字典的值可以是任何数据类型(对象)

  2、字典的查询速度非常快

  3、字典在python3.5之前是无序的,单是3.6优化机制,字典会按照创建字典之处的数据排列

  4、字典可以存储大量的关联性数据

 # 字典嵌套字典列表
dic = {'name': 'alex','python3期':['小潘','春哥', '二师兄'],
'太白':{
'name':'太白金星',
'id': 1306546743423,
'phone': 1358225xxxx,
'sex': '男'
}
}

2、字典的增删改查

增:   有则覆盖,无责添加

dic['keys'] = ' value '

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic['high'] = 179
print(dic) # {'name': 'barry', 'age': 18, 'sex': 'man', 'high': 179}
dic['name'] = 'echo'
print(dic) #{'name': 'echo', 'age': 18, 'sex': 'man', 'high': 179}

setdefault 有则不变,无责添加

dic.setdefault('KEYS', 'value')  如果不填value,责为None

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.setdefault('high') #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}
print(dic)
dic.setdefault('name', 'echo')
print(dic) #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}

删:

1、pop 通过键删除对应值

dic.pop('key')      dic.pop(' key' , ' 没有这个键 ‘)   如果没有健,可以自定义返回值

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.pop('name1', '没有该键') # 没有键则返回自定义的值
print(dic)

2、clear   清空列表值,保留列表

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.clear()
print(dic)

3、popitem 删除最后一个键值对  (3.5及以前版本,是随机删除。因为3.5之前版本字典是无序)

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.popitem() # 3.5之前是随机删除,3.6删除最后一个键值对
print(dic) # {'name': 'barry', 'age': 18}

4、del

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
del dic # 删除整个字典
一次只能删除一个键,没有则报错。还是用pop好一点
dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
del dic['name1'] # 一次只能删除一个键,没有则报错。还是用pop好一点
print(dic)

改:

dic[' key '] = ' value '

dic = {'name': 'barry', 'age': 18}
dic['age'] = 14
print(dic) # {'name': 'barry', 'age': 14}
dic['age', 'name'] = 14, 'alex'
print(dic) # {'name': 'barry', 'age': 14, ('age', 'name'): (14, 'alex')} 把两个键当一个元组,组合成一个键

update  有两种方式:

1、 把dic1  update到 dic2

dic1 = {"name": "jin", "age": 18, "sex":"male"}
dic2 = {"name": "alex","weight": 75}
dic2.update(dic1) # 将dic1字典中的键值对覆盖添加到dic2中,dic1不变。
print(dic1) # {'name': 'jin', 'age': 18, 'sex': 'male'}
print(dic2) # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}

2、dic.update(weight=150, high=175)

dic1 = {"name": "jin", "age": 18}
dic1.update(weight=150, higi=178) # key不在dic1中,则增加
print(dic1) # {'name': 'jin', 'age': 18, 'weight': 150, 'higi': 178}
dic1.update(name=150) # key在dic1中,则修改
print(dic1) # {'name': 150, 'age': 18, 'weight': 150, 'higi': 178}

查:

1、按照键查对应的值
print(dic['name'])
print(dic['name1']) # 没有此键会报错 2、用gat查 ,不会报错
dic = {"name": "jin", "age": 18}
ret = dic.get('age') # 打印 18
ret = dic.get('age1') # 打印None
ret = dic.get('age1','没有此键') #打印 '没有此键'
print(ret)

3、直接循环字典,获取所有key值

for i in dic:
print(i)

4、 dic.keys() ,   dic.values()   dic.item()

dic = {"name": "jin", "age": 18}
# dic.keys() dic.values() dic.items()
# 上面三个都是返回一个类似于列表的容器的特殊数据类型。
print(dic.keys())
for key in dic.keys():
print(key) print(dic.values())
for value in dic.values():
print(value) print(dic.items())
for item in dic.items():
print(item)
dic = {"name": "jin", "age": 18}
for k, v in dic.items():
print(k, v) # 便利,key和value, 可只打印k或v

字典的嵌套

dic = {
'l1': ['alex', '太白'],
'id': 3,
1: {
'data': 20181225,
'place': '深圳校区',
'class': 'python3期',
'name_list': ['小潘', 'jay', '春哥', 'xx'],
}
}
# 1,给小列表['alex', '太白'] alex后面插入一个字符串,'aaa'
dic['l1'].insert(1, 'aaa')
print(dic)
dic2 = {'l1':['alex','aaa', '太白']}
# dic.update(dic2)
# print(dic)

# 2,将id对应的3变成1.
dic['id'] = 1
print(dic)

# 3,将 1 对应的字典的data变成20181224,
dic[1]['data'] = 20181224
print(dic)
dic[1]['data'] -= 1
print(dic)

# 4,将name_list对应的jay全部变成大写。
dic[1]['name_list'][1] = dic[1]['name_list'][1].upper()
print(dic)

# 4,将name_list对应的 xx 删除。
dic[1]['name_list'].pop()
dic[1]['name_list'].remove('xx')
del dic[1]['name_list'][-1]
print(dic)

格式化输出:

# 通过字典的方式
dic = {'name': '太白', 'sex': '男', 'age': 18}
msg = '我叫%(name)s,今年%(age)s,性别%(sex)s' % dic
print(msg)

formkeys()

dic = {'name': 'alex'}
dic = dict.fromkeys('abc', '春哥') #{'a': '春哥', 'b': '春哥', 'c': '春哥'}
dic = dict.fromkeys([1, 2, 3],'春哥') # {1: '春哥', 2: '春哥', 3: '春哥'}
# 坑:值如果是可变的数据类型,那么所有的值都是一个内存地址
dic = dict.fromkeys([1, 2, 3], ['alex']) #{1: ['alex'], 2: ['alex'], 3: ['alex']}
dic[1].append(666) #{1: ['alex', 666], 2: ['alex', 666], 3: ['alex', 666]}
print(dic)

day 05 字典,字典嵌套的更多相关文章

  1. 总结day5 ---- ,字典的学习,增删改查,以及字典的嵌套, 赋值运算

    内容大纲: 一:字典的定义 二:字典的增加 >1:按照key增加,  无则增加,有则覆盖 >2:setdefault()  ,无则增加,有则不变 三:字典的删除 >1:pop()  ...

  2. Python 7 列表 for 字典,嵌套

    列表: 基本格式:变量名 = [元素1,元素2,元素3] 创建:A = ['访客','admin',19]  或  A = list(['armin','admin',19]),  后者更倾向于转换为 ...

  3. 记录我的 python 学习历程-Day05 字典/字典的嵌套

    一.字典的初识 为什么要有字典 字典与列表同属容器型数据类型,同样可以存储大量的数据,但是,列表的数据关联性不强,并且查询速度比较慢,只能按照顺序存储. 什么是字典 先说一下什么叫可变与不可变的数据类 ...

  4. python_字典列表嵌套的排序问题

    上一篇我们聊到python 字典和列表嵌套用法,这次我们聊聊字典和列表嵌套中的排序问题,这个在python基础中不会提到,但实际经常运用,面试中也喜欢问,我们娓娓道来. 在说组合排序之前,先来看看排序 ...

  5. day06python 哈希 字典集合嵌套

    1.hash算法 hash算法 :内存中将值进行hash算法得到一个数值存储在内存中,查找也会按照算法进行查找,使用hash算法 执行效率高相对于list的索引查找 (字典,集合):使用的是hash查 ...

  6. Python 字典 列表 嵌套 复杂排序大全

    https://blog.csdn.net/ray_up/article/details/42084863 一: 字典排序 解析: 使用sorted 方法, 排序后的结果为一个元组. 可以字符串排序( ...

  7. python 元组 字符串 字典 列表嵌套练习题1

    最近学习做的习题,直接复制过来 缩进就乱掉了,所以直接以图片方式上传,题目和答案一起

  8. python学习之第八篇——字典嵌套之字典中嵌套字典

    cities = { 'shanghai':{'country':'china','population':10000,'fact':'good'}, 'lendon':{'country':'eng ...

  9. Python 字典的嵌套

    wf = { "name":"汪峰", "age":52, "hobby":["唱歌", " ...

  10. python 字典格式嵌套,相同项做叠加

    all_dict = {} for tg_id in ['com.qq_a','com.qq_b','com.qq_c','com.qq_c']: tmp_dict = all_dict.get(tg ...

随机推荐

  1. 优秀的 Go 存储开源项目和库

    可以看到,今年谷歌家的 Go 编程语言流行度有着惊人的上升趋势,其发展也是越来越好,因此本文整理了一些优秀的 Go 存储相关开源项目和库,一起分享,一起学习. 存储服务器(Storage Server ...

  2. LeetCode 312. Burst Balloons(戳气球)

    参考:LeetCode 312. Burst Balloons(戳气球) java代码如下 class Solution { //参考:https://blog.csdn.net/jmspan/art ...

  3. linux 2.6.32.220的一个crash记录

    有同事分析一个crash,我参与了分析,记录如下,供遇到相同crash的兄弟参考: crash> bt PID: TASK: ffff881723ce8080 CPU: COMMAND: &qu ...

  4. 趣味编程:静夜思(Swift版)

    func verticalWriting(txt:String, offset:Int) { Dictionary(grouping: txt.enumerated(), by: {$0.0 % of ...

  5. linux下给PHP安装拓展

    要先完成了上一篇文章的phpize的操作,并激活它才能下一步. 下载拓展,在http://pecl.php.net/这个网站下载,其他的有可能不成功,我之前还很纳闷phpize已经调试通过了,但是切换 ...

  6. jQuery中的end()方法

    定义和用法 end() 方法结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态. 以上是官方说法,比较难理解. 还是用一个例子来说明 <!DOCTYPE html> <h ...

  7. 吴裕雄 26-MySQL 复制表

    如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的.本章节将为大家介绍如何完整的复制MySQL数据 ...

  8. 移动端调起qq聊天

    <div class="item item-right" style='width:3rem;padding-left:0rem;'>QQ:<a target=& ...

  9. 通过GCEASY 和 jfr 发现运行时问题

    进入 /dev/shm  目录 ,gc-xxx-xx  的gc 文件 ,上次 gceasy  进行分析 另外 ,通过打开 飞行记录器  , 打开jmc  通过jmx  端口连接上去 ,并启用飞行记录器 ...

  10. Java判断一个字符串中有多少大写字母、小写字母和数字

    Java判断一个字符串中有多少大写字母.小写字母和数字 思路: 大写字母就是A-Z之间,小写字母是a-z之间,数字就是0-9之间,于是做判断就好:用到的String知识点,遍历字符串, 长度方法len ...