python 开发 -- 15字典类型内置方法

一.用途

  • key : value 的形式存多个值
  • 优点 : 存取都快, 每一个值都有对应的 key

二.定义方式

  • “{ }” 内以逗号分隔开多个元素
  • 格式为 “key : value”, 其中 key 必须为不可变类型, value 可以是任意类型
  • 字典类型对应的"工厂"就是dict
dic = {"name" : "mm","age" : 18}
# 背后的操作就是
dic = dict(name = "mm", age = 18)

三.数据类型转换

res=dict([("k1",1111),("k2",2222),("k3",3333)])
print(res)

res=dict(x=111,y=222,z=333)  
print(res)

# ".fromkeys"方法在下面"需要掌握的方法"里详细介绍
res={}.fromkeys(["name","age","gender"],None)
print(res)
=============================
info = [
    ["name","mm"],
    ("age",22),
    ["gender","male"]
]
res = dict(info)  #dict直接把列表字符转换成字典字符
print(res)

{'name': 'mm', 'age': 22, 'gender': 'male'}

================================
# 方式一:
keys = ["name","age","gender"]
value=None
d={}
for k in keys:
    d[k]= None
print(d)
{'name': None, 'age': None, 'gender': None}
# 方式二:
keys = ["name","age","gender"]
value=None
d={}.fromkeys(keys,value)
{'name': None, 'age': None, 'gender': None}
#方式三:
keys = ["name","age","gender"]
d={}.fromkeys(keys,None)   # 默认情况下是:value=None
{'name': None, 'age': None, 'gender': None}

四.常用操作 + 内置方法

🐼优先掌握的操作(*********)

1.按照 key 取值, 可存可取

# 按 "key" 存一个值
dic = {"name":"mm"}
dic["age"] = 22
print(dic)  # {'name': 'mm', 'age': 22}

# 也可以取值,改值
dic["age"] = 18
dic["name"] = dic["name"].upper()
print(dic)  #{'name': 'mm', 'age': 18}

2、长度 : .len( )

  • 统计的是 key 的个数
  • 如果存在 key 相同的键值对, 那么以后入的为主
# 以 "key" 来决定个数
dic = {"name":"mm","age":22,"sex":"man"}
print(len(dic))  # 3

# 有两个 "age", 以后面的为主(就相当于你后面修改了"age"的值一样)
dic = {"name":"mm","age":22,"sex":"man","age":18}
print(dic)  #{'name': 'mm', 'age': 18, 'sex': 'man'}
==========================================
dic = {"name":"mm","age":"12","name":"kk"}
print(len(dic["name"]))
2 

3.成员运算 in 和 not in

  • 判断是不是字典的 key
dic = {"name":"mm","age":22,"sex":"man"}
print("name" in dic)     #True
print("age" not in dic)  #False

4.删除 del, .pop( ), .popitem

  • del : 直接删除"谁", 通用万能删除, 它不支持赋值语法, 赋值会报错
  • .pop() : 根据 key 进行删除, 返回的值是 key 对应的 value
  • .popitem() : 无参数, 随机删除一个键值, 返回一个元组, 元组里第一个值是 key, 第二个值是对应的 value
# "del"
dic = {"name":"mm","age":22,"sex":"man"}
del dic["name"]
print(dic)  #{'age': 22, 'sex': 'man'}

# ".pop", 会返回删除的 "value"
res = dic.pop('age')
print(res)  #22
print(dic)  #{'sex': 'man'}

# ".popitem"返回的值是元组, ("key", "value")
dic = {"name":"mm","age":22,"sex":"man"}
res = dic.popitem()
print(res)  #('sex', 'man')
print(dic)  #{'name': 'mm', 'age': 22}

5.取值 : 键 .keys( ), 值 .values( ), 键值对 .items( )

  • .keys() : 只取 key
  • .values() : 只取 value
  • .items() : 既取 key, 又取 value
  • 以下加入 for 循环组合使用
dic = {"name":"mm","age":22,"sex":"man"}

# ".keys()"
list=[]
print(dic.keys())  #dict_keys(['name', 'age', 'sex'])
for k in dic.keys():
    list.append(k)
print(list)  #['name', 'age', 'sex']

# ".values()"
list2 = []
print(dic.values())  #dict_values(['mm', 22, 'man'])
for v in dic.values():
    list2.append(v)
print(list2)  #['mm', 22, 'man']

# ".items()"
l1 = []; l2 = []
print(dic.items())  #dict_items([('name', 'mm'), ('age', 22), ('sex', 'man')])
for k,v in dic.items():
    l1.append(k)
    l2.append(v)
print(l1)  #['name', 'age', 'sex']
print(l2)  #['mm', 22, 'man']

ps : Python2 当中的 键 .keys( ), 值 .values( ), 键值对 .items( ) 直接是列表输出的结果,比较占空间,而Python3中像是一只老母鸡, 想要就取一个

# "Python2" 中的字典取值
>>> dic = {"name":"mm","age":22,"sex":"man"}
>>>
>>> dic.keys()
['name', 'age', 'sex']
>>>
>>> dic.values()
['mm', 22, 'man']
>>>
>>> dic.items()
[('name', 'mm'), ('age', 22), ('sex', 'man')]

6.取值 .get( ) —>(寻找)

  • 上面提到可以使用 “dic[key]” 这种方式取值, 但找不到会报错
  • .get() : 参数为 key, 找不到返回 None, 容错性更好
dic = {"name":"mm","age":22,"sex":"man"}

# "dic[key]"找不到报错
res = dic["xxxx"]
print(res)  #报错

# ".get()"找到返回"value",找不到返回"None"
res = dic.get("name")
print(res)  #mm
res = dic.get("xxxx")
print(res)  #None

🐨需要掌握的操作(****)

1.更新 .update( )

  • 更新就是键值对的修改或增加
  • 就像一个软件, 新版本是在旧版本的基础上修改 BUG 或者增加功能
  • 对与老字典来说,更新指的是 : 新字典中有而老字典中没有则添加,新有而老也有则覆盖
dic = {"name":"mm","age":22}

# 修改了 "age", 增加了 "sex"
res = dic.update({"age":18,"sex":"man"})
print(dic)  #{'name': 'mm', 'age': 18, 'sex': 'man'}

2.清空 .clear( )

dic = {"name":"mm","age":22,"sex":"man"}
dic.clear()
print(dic)  #{}

3.初始化(造)一个字典模板 .fromkeys( )

  • 前一个参数是 key, 后一个参数是 value
  • 语法 : {}.fromkeys(['name','age','sex'],'xxxxxx')
# 不使用 ".fromkeys" 建模板
good_info={
    'name':None,
    'price':None,
    'count':None
}

# 使用 ".fromkeys()" 建模板
dic = {}.fromkeys(['name','age','sex'],None)
print(dic)  #{'name':None,'age':None,'sex':None}
  • 示例
🐳使用 "for" 循环
 list1=['name','price','count']
 dic={}
 for x in list1:
     dic[x]=None
 print(dic)  #{'name': None, 'price': None, 'count': None}
🐳使用 ".fromkeys()" 直接实现
dic = {}.fromkeys(list1,None)
print(dic)   #{'name': None, 'price': None, 'count': None}

# 加入商品信息
'mac'  20000  10   #商品信息
dic['name']='mac'   #将商品信息加入到模板中
dic['price']=20000  #价格
dic['count']=10     #个数

4.添加并返回值 .setdefaul( )

  • 如果字典里有要添加的 key, 则不修改, 并返回 key 对应的原 value
  • 如果字典里没有要添加的 key, 则添加, 并返回添加的 key 对应的新 value
# 添加存在的 "key"
dic={'name':'mm','age':22}
res=dic.setdefault('name','mm')
print('返回值:',res)   #返回值: mm
print(dic)            #{'name': 'mm', 'age': 22}

# 添加不存在的 "key"
res=dic.setdefault('sex','man')
print('返回值:',res)   #返回值: man
print(dic)            #{'name': 'mm', 'age': 22, 'sex': 'man'}

# 如果key有,就不添加,如果没有就添加
dic = {"name":"mm","age":"12"}
if "name" in dic:
    ...  # ...等于pass
else:
    dic["name"] = "mm"
print(dic)
# {'name': 'mm', 'age': '12'}             #如果有就不添加
{'nam': 'mm', 'age': '12', 'name': 'mm'}  # 如果没有就添加  'name': 'mm'

五.总结

  • 可以存多个值

  • 无序, 取值是按 “key” 取对应的 “value”

  • 可变类型—>不可 hash 类型

“name” in dic:
… # …等于pass
else:
dic[“name”] = “mm”
print(dic)

{‘name’: ‘mm’, ‘age’: ‘12’} #如果有就不添加

{‘nam’: ‘mm’, ‘age’: ‘12’, ‘name’: ‘mm’} # 如果没有就添加 ‘name’: ‘mm’


## 五.总结

- ### 可以存多个值

- ### 无序, 取值是按 "key" 取对应的 "value"

- ### 可变类型--->不可 hash 类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FikL-09-19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值