字典的基本操作

1,dict()字典是python中唯一映射类型,用{   }来表示,内部使用{key:value}来表示这样的键值对来表示,并且;来保存数据.例如:{"jay":"周杰伦","jj","林俊杰"},在dict中"key"是唯一的,通过哈希"key"来计算出保存一地址.(通俗的来讲就是"key"不可改变),value没有限制,不是按照我们保存的顺序保存的,无序的.

  • 不可变得数据类型:int str bool tuple 
  • 可变的数据类型:list dict set
  • * "key"是不可变的, "value"可以是任何数据类型,是按照哈希算法顺序,不是连续的,所以.dict不能进行切片操作.

2,dict 的基本功能:

  • 1>dict的增加:
    • dict[不存在的key] = "value"...............................就在原dict中增加{key:value}

 

dict = {"jay": "周杰伦", 'jj': "林俊杰", "joly": "蔡依林"}
dict["xx"] = "雪雪"   # 当字典中不存在可以时,要增加这一组键值对
dict["joly"] = "小雪"  # 当字典中存在此键的时候,就修改这个键锁对应的value值

# 也可以通过setdefault("key": "value")来说实现对dict的增加
dic = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dic.setdefault("xuexue", "雪雪")  # 当原列表中没有相同key时,此时是增加的功能
print(dic)
  • 2>dict的删除:
    • 格式:dict.pop("key"),    del dict[key],             ret.popitem("key").......随机删除

 

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
ret = dict.pop("jay")  # 指定删除字典中的键,就可以把这一组键值对删除
print(ret)  # 把删除的value值返回给ret
ret1 = dict.popitem()  # 此时是随机删除,但是我试了不是随机删除(删除最后一组键值对)
print(dict)
ret2 = dict.clear()  # 清空字典中的所有键值对
print(dict)
  • 3>dict的修改:
    • 格式:dict[存在的key] = 全新的"value"    ...................   d1.update(d2) 把d2的k--v更新到d1中

 

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dict["jay"] = "周星星"  # 如果字典中存在这个key就是修改,不存在就是增加一组键值对
print(dict)  # 替换的只是value,当value是int的时候就可以做运算,如果是str就可以拼接和里拿徐行输出
dict1 = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
dict2 = {"sylar": "邱老师", "jay":" 胡汉三","wusir": "吴佩琪"}
dict1.update(dict2)  # 把dict2中的内容更新到dict1中,如果存在d1,与d2相同的key是则会替换,否则增加
print(dict1)  # {'jay': ' 胡汉三', 'jj': '林俊杰', 'joly': '蔡依林', 'sylar': '邱老师', 'wusir': '吴佩琪'}
print(dict2)  # {'sylar': '邱老师', 'jay': ' 胡汉三', 'wusir': '吴佩琪'}
  • 4>dict的查找:
    • 格式:print(dict["key"])      print(dict.get("key"))      .setdefault("key")

 

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict["jay"])  # 直接根据字典的键去查询value,如果没有这个key,则会报错
print(dict.get("key"))  # 如果get中输入的是字典中已经存在的键,则返回这个value值,假如没有则返回None
ret = dict.setdefault("jay")
print(ret)  # 当字典中存在这个键的时候,就会对应的value值返回给ret
print(dict)  # 当字典中不存在这个key,就会新增这个键值对

ret1 = dict.setdefault("xuexue", "雪雪")
print(ret1)  # 此时输出的是雪雪
print(dict)  # 此输出的是{'jay': '周杰伦', 'jj': '林俊杰', 'joly': '蔡依林', 'xuexue': '雪雪'}
# 小结:在执行setdefault("key")中,先判断"key"是否存在dict中,如果存在就执行查询功能
# 如果dict中不存在key则执行的是增加功能

3,dict的常用操作方法:

  • 1>     .keys().............返回所有字典的key的集合(高仿列表)(括号里边不用加任何东西)....     

 

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict.keys())  # 此时拿到的是字典里的所有的key值:dict_keys(['jay', 'jj', 'joly'])
for key in dict.keys():  # 拿到的字典所有的key是一个类似列表,但不是列表(可以大迭代)
    print(key)  # jay jj joly
  • 2>     .values( )  同理1>:dict中的"value"所有都输出一个集合(高仿列表)

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}

print
(dict.values(), type(dict.values())) # dict_values(['周杰伦', '林俊杰', '蔡依林']) <class 'dict_values'> for value in dict.values(): print(value) # 周杰伦 林俊杰 蔡依林
  • 3>     .items( )   输出的是键值对("key","value").....且是一个元组

 

dict = {"jay": "周杰伦", "jj": "林俊杰", "joly": "蔡依林"}
print(dict.items())  # 此时输出的是:dict_items([('jay', '周杰伦'), ('jj', '林俊杰'), ('joly', '蔡依林')])
# dict_items和dict_keys和dict_values都一样,都是可迭代对象
for item in dict.items():
    print(item)  # ('jay', '周杰伦')  ('jj', '林俊杰')  ('joly', '蔡依林')
    # 此时item输出的是键值对组成的元组
# 因此:
for k,v in dict.items():
    print(k, v)  # jay 周杰伦  jj 林俊杰  joly 蔡依林

# 因此可以引出结构的概念:
# 解构:就是把元素拆开并一一对应(反映了dict的映射关系性质)
a, b = 1,2
print(a)  # 此时输出的结果是:1
print(b)  # 此时输出的结果是:1
a, b, c =("雪雪","小雪","雪人")
print(a)  # 雪雪
print(b)  # 小雪
print(c)  # 雪人
a, b = (1,2)
print(a, b)  # 1 2
  • 4>dict的嵌套:就是dict中包含list,tiple,int,str,bool,

 

dict = {
    "name": "汪峰",
    "age": 18,
    "wife": {
        "name": "章子怡",
        "age": 28,
    },
    "children": [
        "第一个孩子",
        "第二个孩子",
    ],
    "desc": "峰哥不会搞我吧,没关系,我想上头条"
}
# 同样适应于增删改查
print(dict.get("children"))  # 此时输出的结果是:['第一个孩子', '第二个孩子']

 

posted @ 2018-07-10 14:21  帅爆太阳的男人  阅读(186)  评论(0)    收藏  举报