python字典

一. 字典的简单介绍   

字典(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={"关羽":"将军","李云龙":"师长","和尚":"排长","刘备":"皇上"}
print(dic)
{'关羽': '将军', '李云龙': '师长', '和尚': '排长', '刘备': '皇上'}

 

合法的
 dic = {1: "马化腾", False:"阿里巴巴", "sylar":"帅的不行不行的", (1, "哈哈"): "元组"}
 print(dic) 

不合法:
dic = {1: "马化腾", False:"阿里巴巴", "sylar":"帅的不行不行的", (1, "哈哈"): "元组", ["吼吼"]:"列表"}
print(dic)
*不可以是列表

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

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

1. 增加

dic={"TT":"汤普森"}
dic["jj"]="凌俊杰"
print(dic)

{'TT': '汤普森', 'jj': '凌俊杰'}
如果key重复了. 会替换掉原来的value

dic={"TT":"汤普森"}
dic["jj"]="凌俊杰"
dic["jj"]="123"
print(dic)

{'TT': '汤普森', 'jj': '123'}
dic={"TT":"汤普森"}
dic.setdefault("詹姆斯","湖人")
print(dic)
{'TT': '汤普森', '詹姆斯': '湖人'}
如果字典中已经包含了这个key. 不再继续保存
dic={"TT":"汤普森"}
dic.setdefault("詹姆斯","湖人")
dic.setdefault("詹姆斯","篮球运动员")
print(dic)
{'TT': '汤普森', '詹姆斯': '湖人'}
dic={"TT":"汤普森"}
dic.setdefault("科比")
print(dic)
{'TT': '汤普森', '科比': None}

2. 删除

dic={"pig":"","dog":"","apple":"苹果"}
dic.pop("pig")
print(dic)
{'dog': '', 'apple': '苹果'}
删除一个元素. 返回这个元素的value值
dic={"pig":"","dog":"","apple":"苹果"}
e=dic.pop("pig")
print(e)
猪
dic={"pig":"","dog":"","apple":"苹果"}
del dic["dog"]
print(dic)
{'pig': '', 'apple': '苹果'}
随机删除
dic={"pig":"","dog":"","apple":"苹果"}
dic.popitem()
print(dic)
返回给你的是一个元组
e=dic.pop("pig")
print(e)
清除
dic={"pig":"","dog":"","apple":"苹果"}
dic.clear()
print(dic)

3. 修改

dic={"李云龙":"独立团","裤兜":500,"姚明":"篮球"}
dic["裤兜"]=dic["裤兜"]-200
print(dic)
{'李云龙': '独立团', '裤兜': 300, '姚明': '篮球'}
把dic2中的内容更新到 dic1 , 如果存在了key. 替换. 如果不存在,添加
dic1={"李云龙":"营长","和尚":"警卫员","诸葛亮":"丞相"}
dic2={"关羽":"将军","李云龙":"师长","和尚":"排长","刘备":"皇上"}
dic1.update(dic2)   
print(dic1)
print(dic2)
{'李云龙': '师长', '和尚': '排长', '诸葛亮': '丞相', '关羽': '将军', '刘备': '皇上'}
{'关羽': '将军', '李云龙': '师长', '和尚': '排长', '刘备': '皇上'}

4. 查询

dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic["及时雨"])
宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic["小李广"])
报错
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic.get("及时雨"))
宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic.get("小李广"))
None
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic.get("小李广","花荣")) 
花荣
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
ret=dic.setdefault("及时雨")
print(ret)         
宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
ret=dic.setdefault("小李广")
print(ret) 
None
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
ret=dic.setdefault("小李广","花荣")
print(ret) 
花荣
# 1. 首先判断原来的字典中有没有这个key . 如果没有. 执行新增
# 2. 用这个key去字典中查询, 返回查到的结果

5. 其他相关操作
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic.keys()) 
dict_keys(['及时雨', '豹子头', '黑旋风'])

拿到所有的key, 返回key的集合. 像是列表. 但是不是列表

print(dic.values())
dict_values(['宋江', '林冲', '李逵'])
可以进行迭代循环
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
for key in dic.keys():
print(key)

及时雨
豹子头
黑旋风

for values in dic.values():
print(values)
宋江
林冲
李逵
拿到键值对

dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
print(dic.items())

dict_items([('及时雨', '宋江'), ('豹子头', '林冲'), ('黑旋风', '李逵')])
遍历dict
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"}
for item in dic.items():
print(item)
('及时雨', '宋江')
('豹子头', '林冲')
('黑旋风', '李逵')

for k , v in dic.items():                # = item # (key, value)
print(k,v)

及时雨 宋江
豹子头 林冲
黑旋风 李逵
解构 . 解包

a, b = (1, 2)
print(a)
print(b)

1
2
a, b, c = ("马化腾", "马云", "马良")
print(b)

马云
镶嵌
dic = {
    "name":"汪峰",
    "age": 58,
    "wife":{
        "name":"国际章",
        "salary": 180000,
        "age": 37
    },
    "children":[
        {"name":"老大", "age": 18},
        {"name":"老二", "age": 118}
    ]
}
print(dic["children"][1]["age"])

118

print(dic["wife"]['salary'])
180000
字典的for 循环
dic = {1: 'a', 2:'b', 3:'c'}
for a in dic:
print(a)
1
2
3
print(dic[a])
a
b
c

直接循环字典.拿到的是key

 

原文地址:https://www.cnblogs.com/chenyibai/p/9274470.html