python学习2之词典方法解析

1 创建词典 # dic2-5 最外层括号是构造方法,第二层是代表一个序列,最里层是每一个键值对

dic1 = {"name":"aa","age":13}
dic2 = dict((("name","aa"),("age",13)))
dic3 = dict((["name","aa"],["age",13]))
dic4 = dict([("name","aa"),("age",13)])
dic5 = dict([["name","aa"],["age",13]])
print("dic1:",dic1)
print("dic2:",dic2)
print("dic3:",dic3)
print("dic4:",dic4)
print("dic5:",dic5)

2增

第一种新增方式

dic1 = {"name":"xiaoming","age":13}
print(dic1)
dic1["hobby"]="girl"
print(dic1)

第二种方式

dic1 = {"name":"xiaoming","age":13}
ret = dic1.setdefault("age",34)#有返回值
print(dic1)#原来词典有该键,则不修改词典内容
print(ret)#原来词典有该键,则不修改词典内容,并返回原词典的该键的值
ret = dic1.setdefault("address","beijing")
print(dic1)#原来词典没有该键,新增该键值为词典内容
print(ret)#原来词典没有该键,新增该键值为词典内容,并返回新增的该键的值

3删

1 del dic[键]

dic1 = {"name":"xiaoming","age":13}
del dic1["name"]
print(dic1)

2 dic.clear()清空词典

dic1 = {"name":"xiaoming","age":13}
dic1.clear()
print(dic1)

3 dic.pop(键) 有返回值 ,返回删除的键值对的值

dic1 = {"name":"xiaoming","age":13}
ret = dic1.pop("age")
print(dic1,ret)

4 dic.popitem()随机删除 基本没有用处 有返回值是删除的键值对

dic1 = {"name":"xiaoming","age":13}
ret = dic1.popitem()#返回值是删除的键值对
print(ret ,dic1)

4改

1根据键来修改

dic1 = {"name":"xiaoming","age":13}
dic1["name"]="new_xiaoming"
print(dic1["name"])

2 update(dic)

dic1 = {"name":"xiaoming","age":13}
dic2 = {"ad":"beijing","confirm":"zhonghangzxin"}
dic1.update(dic2)#会把dic2的内容更新到dic1,如果有相同的键值,dic1 的该值会被dic2 的覆盖
print(dic1)#没有相同建,不会覆盖,结果{"name":"xiaoming","age":13,"ad":"beijing","confirm":"zhonghangzxin"}
dic3 = {"depart":"beijing","confirm":"zhonghangzxin"}
dic1.update(dic3)
print(dic1)#有相同建 覆盖{"name":"xiaoming","age":13,"ad":"beijing","confirm":"zhonghangzxin","depart":"beijing"}

5查

1 根据键来获取

dic1 = {"name":"xiaoming","age":13}
a = dic1["name"]
print(a)

2 根据 方法来获取

dic1 = {"name":"xiaoming","age":13}
#keys()
print(dic1.keys())#py3的新类型可以转换为list  获取所有的键
print(list(dic1.keys()))#转换为list类型
print(list(dic1.values()))#同上,获取所有的值
print(list(dic1.items()))#同上 ,获取所有的键值对

6其他内置方法

1 dict.fromKeys([],defalt) 也是创建词典的一种 []中全是键 ,defalt是默认值

dic1 = dict.fromkeys(["test1","test2","test3"],"hahahaha")
print(dic1)#所有的值都被初始化为hahahaha
dic2 = dict.fromkeys(["test1","test2","test3"],["hahahaha","hehehehe"])
print(dic2)#输出{'test3': ['hahahaha', 'hehehehe'], 'test1': ['hahahaha', 'hehehehe'], 'test2': ['hahahaha', 'hehehehe']}
dic2["test1"][1] ="huhuhuhu" #虽然改的是test1的值的第二个元素,但是词典的所有的键的值对应都改了
print(dic2)#输出{'test3': ['hahahaha', 'huhuhuhu'], 'test1': ['hahahaha', 'huhuhuhu'], 'test2': ['hahahaha', 'huhuhuhu']},

2#sorted() 根据键排序可加参数

dic = {1:222,3:555,2:666}
sorted(dic)
print(dic)#{1: 222, 2: 666, 3: 555}

dic = {1:222,3:555,2:666}

print(sorted(dic.values()))#将值进行排序[222, 555, 666]
print(sorted(dic.keys()))#将键进行排序[1, 2, 3]
print(sorted(dic.items()))#按照键进行排序[(1, 222), (2, 666), (3, 555)]

3遍历

1 推荐使用,效率高
dic1 = {"name":"xiaoming","age":13}
for i in dic1:#遍历的是键
    print(i,dic1[i])#name xiaoming  age 13
2 不推荐 效率低
dic1 = {"name":"xiaoming","age":13}
for i in dic1.items():#遍历的是键
    print(i)#('name', 'xiaoming')  ('age', 13)


for i,v in dic1.items():#遍历的是键
    print(i,v)#name xiaoming  age 13

4 dic.copy () 浅拷贝,父类不随被拷贝对象变化,子类随变化

dict1 =  {'user':'runoob','num':[1,2,3]}

dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
 
# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)
 
# 输出结果
print(dict1)
print(dict2)
print(dict3)
#############输出结果################
{'user': 'root', 'num': [2, 3]}#没有问题
{'user': 'root', 'num': [2, 3]}#因为是引用,随dic1变化
{'user': 'runoob', 'num': [2, 3]}#相当于重新创建,一级元素不变,二级元素变化(浅拷贝)
#####################################

5 radiansdict.get(key,default=None)返回指定键的值,如果值不在字典中返回default值

dic1 = {"name":"xiaoming","age":13}
print(dic1.get("name",-1))#xiaoming
print(dic1.get("nn",-1))#-1

6 key in dict如果键在字典dict里返回true,否则返回false

dic1 = {"name":"xiaoming","age":13}
print("name" in dic1)#True
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值