05_python_字典

一、字典定义

  字典是python中唯一的映射类型,以{ }括起来的键值对组成,在dict中key是唯一的.在保存时,根据key来计算一个内存地址,然后把key-value保存至地址中.这种算法是hash算法.所以 key必须是不可变数据类型(即可hash的),value是不限制的,dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表不是连续的. 所以不能进行切片操作. 它只能通过key来获取dict中的数据

  可hash(不可变)数据类型: int  str   tuple  bool

  不可hash(可变)数据类型: list  dict  set

  语法: dic = {key1: value1key2: value2}

二、字典的增删改查

  1、增

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

  2、删除

1 ret = dic.pop('joy')
2 print(ret)
3 
4 del dic['joy'] #key值删除
5 print(dic)
6 
7 ret = dic.popitem() # 随机删除
8 
9 dic.clear() # 清空字典中的所有内容

  3、修改

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

  4、查询

# 查询一般用key来查找具体的数据
print(dic['name']) #如果查询的key不存在会报错
print(dic.get('ok'))
print(dic.get('syslay'))  # None
print(dic.get('syalr', '')) #

三、字典其他操作

 1 dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
 2 print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是
 3                         # 什么.当成list用就行
 4 
 5 for key in dic.keys():
 6     print(key)
 7 
 8 print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐'])当list来⽤
 9 
10 for value in dic.values():
11     print(value)
12 
13 print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), #
14                          #('age',18), ('ok', '科⽐')]) 这个东⻄也是list. 只不过
15                          #list中装的是tuple
16 
17 for key, value in dic.items(): # ?? 这个是解构
18     print(key, value)
19 
20 # 解构
21 a, b = 1, 2
22 print(a, b)
23 
24 (c, d) = 3, 4
25 print(c, d)
26 
27 e, f = [1, 2, 3] # 解构的时候注意数量必须匹配
28 print(e, f)

四、字典嵌套

 1 # 字典的嵌套
 2 dic1 = {
 3     "name": "汪峰",
 4     "age": 18,
 5     "wife": {
 6         "name": '章⼦怡',
 7         "age": 28
 8     },
 9     "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
10     "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
11 }
12 print(dic1.get("wife").get("name"))

 

posted @ 2018-09-07 16:06  qi.hu  阅读(213)  评论(0编辑  收藏  举报