Python字典类型

目录

目标

版本

官方文档

简介

实战

创建

循环

常用方法

目标

        掌握字典类型的使用方法,包括:创建、循环、常用方法等操作。


版本

        Python 3.12.0


官方文档

Mapping Types — dicticon-default.png?t=N7T8https://docs.python.org/3/library/stdtypes.html#mapping-types-dict


简介

官方定义

Mapping Types — dict

mapping object maps hashable values to arbitrary objects. Mappings are mutable objects. There is currently only one standard mapping type, the dictionary. (For other containers see the built-in listset, and tuple classes, and the collections module.)

A dictionary’s keys are almost arbitrary values. Values that are not hashable, that is, values containing lists, dictionaries or other mutable types (that are compared by value rather than by object identity) may not be used as keys. Values that compare equal (such as 11.0, and True) can be used interchangeably to index the same dictionary entry.

译文

Python中仅有一种标准的映射类型,即字典(dictionary)类型。

不可变数据类型才可以作为字典的键(key)。比如:

  1. 数字
  2. 字符串
  3. 元组
  4. 布尔值
  5. 不可变集合(frozenset)
  6. 枚举类型
  7. 用户自定义的不可变类型

分析

字典数据类型是键值对的形式,这与java中的HashMap很相似


实战

创建

官方定义

Dictionaries can be created by several means:

  • Use a comma-separated list of key: value pairs within braces: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}

  • Use a dict comprehension: {}{x: x ** 2 for x in range(10)}

  • Use the type constructor: dict()dict([('foo', 100), ('bar', 200)])dict(foo=100, bar=200)

这里给出了字典的三种创建方法:

方法一(用大括号创建)

myDict={"name":"zhangsan","age":12,"sex":1,False:"yes",True:"no",frozenset(["a","b","c"]):"Hello World."}
#输出:{'name': 'zhangsan', 'age': 12, 'sex': 1, False: 'yes', True: 'no', frozenset({'a', 'b', 'c'}): 'Hello World.'}
print(myDict)

方法二(用字典推导式创建)

fruitList = ['apple', 'banana', 'orange', 'kiwi', 'grape']
#水果名称作key,水果单词长度作value
fruitDict={key:len(key) for key in fruitList}
#输出:{'name': 'zhangsan', 'age': 12, 'sex': 1, False: 'yes', True: 'no', frozenset({'a', 'b', 'c'}): 'Hello World.'}
print(fruitDict)

方法三(用构造方法创建)

用关键字作key创建字典

myDict=dict(name="Tom",age=12,sex=1)
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

用可迭代对象创建字典

myDict=dict([("name","Tom"),("age",12),("sex",1)])
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

混合模式创建

myDict=dict([("name","Tom"),("age",12)],sex=1)
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

循环

遍历字典的key

#方法一
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex 
for key in myDict:
    print(key,end=" ")

#方法二
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex
for key in iter(myDict):
    print(key,end=" ")

#方法三
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex
for key in myDict.keys():
    print(key,end=" ")

反向遍历字典中的key

myDict={"name":"Tom","age":12,"sex":1}
#输出:sex age name 
for key in reversed(myDict):
    print(key,end=" ")

遍历字典的value

myDict=dict(name="Tom",age=12,sex=1)
#输出:Tom 12 1 
for value in myDict.values():
    print(value,end=" ")

遍历字典的键值对

myDict=dict(name="Tom",age=12,sex=1)
"""
输出:
name = Tom
age = 12
sex = 1
"""
for key, value in myDict.items():
    print(key,"=",value)

使用视图对象循环

myDict=dict(name="Tom",age=12,sex=1)
#输出:dict_items([('name', 'Tom'), ('age', 12), ('sex', 1)]) <class 'dict_items'>
#dict_items是字典视图对象的类型
print(myDict.items(),type(myDict.items()))
"""
输出:
('name', 'Tom') <class 'tuple'>
('age', 12) <class 'tuple'>
('sex', 1) <class 'tuple'>
"""
for item in myDict.items():
    print(item,type(item))

常用方法

以集合的形式获取字典的所有key

myDict={"name":"Tom","age":12,"sex":1}
keyList=list(myDict)
#输出:['name', 'age', 'sex'] <class 'list'>
print(keyList,type(keyList))

获取键值对数量

myDict={"name":"Tom","age":12,"sex":1}
dictLen=len(myDict)
#输出:3 <class 'int'>
print(dictLen,type(dictLen))

根据key获取value

class MyDict(dict):
    def __missing__(self, key):
        return "{}不存在".format(key)
#用字典的字类MyDict的构造方法创建字典
yourDict=MyDict(name="Tom",age=12,sex=1)
#输出:<class '__main__.MyDict'>
print(type(yourDict))
#输出:Tom
print(yourDict["name"])
#输出:birthday不存在
print(yourDict["birthday"])

根据key设置value

myDict={"name":"Tom","age":12,"sex":1}
myDict["name"]="Green"
#输出:{'name': 'Green', 'age': 12, 'sex': 1}
print(myDict)

根据key删除元素

myDict={"name":"Tom","age":12,"sex":1}
del myDict["name"]
#输出:{'age': 12, 'sex': 1}
print(myDict)

根据key删除元素并返回value

myDict={"name":"Tom","age":12,"sex":1}
name=myDict.pop("name");
#输出:Tom
print(name)

birthday=myDict.pop("birthday","没有这个key");
#输出:没有这个key
print(birthday)

birthday=myDict.pop("birthday");
#报错
print(birthday)

是否包含某个key

myDict={"name":"Tom","age":12,"sex":1}
#输出:True
print("name" in myDict)

是否不包含某个key

myDict={"name":"Tom","age":12,"sex":1}
#输出:True
print("name" not in myDict)

清空字典

myDict={"name":"Tom","age":12,"sex":1}
myDict.clear()
#输出:{}
print(myDict)

拷贝字典(浅拷贝)

myDict={"name":"Tom","age":12,"sex":1}
yourDict=myDict.copy()
#输出:不同的id
print(id(yourDict),id(myDict))
#输出:相同的id
print(id(yourDict.get("name")),id(myDict.get("name")))

移除并返回字典中的一个元素,返回对象是元组类型。

Python3.7版本开始,popitem方法按照后进先出,之前的版本随机返回。

myDict={"name":"Tom","age":12,"sex":1}
oneTuple=myDict.popitem()
#输出:('sex', 1) <class 'tuple'>
print(oneTuple,type(oneTuple))

twoTuple=myDict.popitem()
#输出:('age', 12) <class 'tuple'>
print(twoTuple,type(twoTuple))

threeTuple=myDict.popitem()
#输出:('name', 'Tom') <class 'tuple'>
print(threeTuple,type(threeTuple))

print(myDict)
fourTuple=myDict.popitem()
#报错,因为此时myDict里没有元素了。
print(fourTuple,type(fourTuple))

如果字典中没有这个key则往字典插入数据,如果字典中有这个key,则不修改数据。默认值是可选参数,默认为None。

myDict={"name":"Tom","age":12,"sex":1}
myDict.setdefault("name","Jack")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

myDict.setdefault("birthday","1999-09-09")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09'}
print(myDict)

myDict.setdefault("occupation")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09', 'occupation': None}
print(myDict)

myDict.setdefault("name")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09', 'occupation': None}
print(myDict)

批量更新数据

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09"}
myDict.update(yourDict)
#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1999-09-09'}
print(myDict)

#根据关键词修改数据
myDict.update(name="Jack",age=20,birthday="1990-09-09")
#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1990-09-09'}
print(myDict)

#根据迭代对象修改数据
myList=[("work","farmer"),("name","Green")]
myDict.update(myList)
#输出:{'name': 'Green', 'age': 20, 'sex': 1, 'birthday': '1999-09-09', 'work': 'farmer'}
print(myDict)

根据优先级合并两个字典产生新字典

Python3.9版本中引入的字典合并操作符。

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09","sex":None}
otherDict=myDict | yourDict
#输出:<class 'dict'>
print(type(otherDict))

#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1999-09-09'}
#分析:yourDict在右边,所以如果key相同,取yourDict的value
print(otherDict)

根据优先级修改两个字典产生新字典

Python3.9版本中引入的字典合并操作符。

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09","sex":None}
myDict |= yourDict
#输出:<class 'dict'>
print(type(myDict))

#输出:{'name': 'Jack', 'age': 20, 'sex': None, 'birthday': '1999-09-09'}
#分析:yourDict在右边,所以如果key相同,取yourDict的value
print(myDict)
  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值