博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习---Python下[字典]的学习
阅读量:4359 次
发布时间:2019-06-07

本文共 5910 字,大约阅读时间需要 19 分钟。

Python中唯一的映射类型(哈希表)       -->Java中的HashMap<K,V>

Python对key进行了哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序的

字典的对象是可变,但是字典的键值必须使用不可变对象,并且一个字典中可以使用不同类型的键值

创建字典:key的设置必须是不可变的类型,可以整数,可以是变量,元组,也可以使单字符'a'【类似Java中的key的唯一性】

字典特点: 无序, 键值唯一[如遇冲突后面会覆盖前面]

字典的创建

          1. 直接创建 hash = {'[1,2,3]': 'hello world'},要求key是不可变的

          2. 利用dict类创建: dict(name='hhh',age=12)

          3. 利用dict.fromkeys: dict.fromkeys(['test1', 'test2', 'test3'], 'hhh')

直接创建

# '[1,2,3]',将一个元组做为一个字符串传入进去,所以执行成功hash = {'[1,2,3]': 'hello world'}print(hash)# 必须是不可变类型,这里的[1,2,3]是可变类型,不能被hash计算unhash = {[1,2,3]: 'hello world'}print(unhash)

根据dict类创建字典:

# 注意键值不需要带引号dic = dict(name='ftl', age=12, sex='male')       # 推荐使用,py官方写法,不需要引号哈print(dic) dd = dict((('name', 'ftl'), ('age', 13), ('sex', 'male')))print(dd)

dict.fromkeys创建字典(有问题)

name = dict.fromkeys(['test1', 'test2', 'test3'], 'hhh')print("name             ", name)name['test1'] = 'ftl'print("name修改test1属性", name)#有问题,可以查询深浅拷贝name2 = dict.fromkeys(['test1', 'test2', 'test3'], ['hello', 'world'])print("name2             ", name2)name2['test1'][1] = 'Python'print("name2修改test1属性", name2)

字典的查询

keys, values, items, person['age'], person['school']['name']

print('-------------------------------------------------------------------------')person = {"name": "hhh", "age": 36, "school": {'name': 'xupt', 'headmaster': 'hhh2017'}}# 打印所有字典信息:print("打印所有字典信息:", person)# 根据键值取对象print("根据键值取对象:", person['age'])# 取出学校的信息&&单独取出校长名称print("学校信息:", person['school'])print("学校信息(校长名字):", person['school']['headmaster'])print('-------------------------------------------------------------------------')# 打印所有的keys,返回一个dict_keys类型print("打印所有的keys,返回dict_keys类型:", person.keys())# 打印所有的keys,转换dict_keys类型为listprint("打印所有的keys,转换dict_keys类型为list:", list(person.keys()))# 打印嵌套的字典的keysprint("打印嵌套的字典的keys:", person['school'].keys())print('-------------------------------------------------------------------------')# 打印所有的values,返回一个dict_keys类型print("打印所有的values,返回dict_values类型:", person.values())# 打印所有的values,转换dict_keys类型为listprint("打印所有的values,转换dict_values类型为list:", list(person.values()))# 打印嵌套的字典的valuesprint("打印嵌套的字典的values:", person['school'].values())print('-------------------------------------------------------------------------')# 打印键值对,作为一个元组存储print("打印键值对:", person.items())# 打印嵌套的字典的键值对print("打印嵌套的字典的键值对:", person['school'].items())print('-------------------------------------------------------------------------')# 如果遇到键值key冲突,则后面的会覆盖前面的key值name = {'age': 'hello', 'age': '12'}print("键值冲突后面会覆盖前面的内容:", name)print('-------------------------------------------------------------------------')

字典的查询

字典利用get读取内容:

dic = {'name':'ftl', 'age':23, 'sex': 'male'}print(dic['name'])print(dic.get('name'))print(dic.get('school'))  # 找不出来后打印Noneprint(dic.get('school','peking'))  # 找不出来后打印后面的默认值 peking字典的判断: in 用来判断键key是否在字典中name = {'h':'hello', 'w':'world'}print('h' in name)print('hello' in name)

字典的增加

        1. 赋值添加

        2. setdefault: 没有就添加,有就不改动,返回相应的键值

info = {'name': 'ftl'}print("添加信息之前:", info)# 直接赋值添加info['age'] = 13print("添加信息之后:", info)# setdefault有就不操作,没有就添加,并且返回一个值real = info.setdefault('school', 'xupt')print("setdefault添加信息之后(添加信息):", info)print("setdefault返回的值:", real)real2 = info.setdefault('age', 100)print("setdefault添加信息之后(修改信息):", info)print("setdefault返回的值:", real2)

字典的修改

       1.  取值后重新赋值

       2.  update方法

取值后重新赋值

<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />

print('-------------------------------------------------------------------------')person = {"name": "hhh", "age": 36, "school": {'name': 'xupt', 'headmaster': 'hhh2017'}}# 打印所有字典信息:print("打印所有字典信息(旧的):", person)# 根据键值修改对象person['age'] = 100print("根据键值修改person的:", person['age'])# 修改取出校长名称person['school']['headmaster'] = 'python'print("学校信息(新校长名字):", person['school']['headmaster'])print('-------------------------------------------------------------------------')

Update方法修改属性:有则修改,没有则添加

person = {"name": "hhh", "age": 36, "school": 'xupt'}person2 = {'name': 'ftl', 'age': 100, 'school': 'qinghua', 'sex': 'male'}print("Pserson(old):", person)print("Pserson2(old):", person2)person.update(person2)print("Pserson(new):", person)print("Pserson2(new):", person2)

字典的删除

     del :    del person['age']      del person

     clear:   person.clear()

     pop:    person.pop('age')  删除并返回删除对象的value值

     popitem:  默认随机删除一个key-value,并返回一个元组

person = {"name": "hhh", "age": 36, "school": 'xupt', 'sex': 'male', 'hello': 'world'}print("执行了del person['age']前:", person)del person['age']# del person   删除了person对象print("执行了del person['age']后:", person)real = person.pop('sex')print("person.pop('sex')后", person)print("person.pop('sex')的返回值", real)# popitem 随记删除一个,并返回一个元组ret = person.popitem()print("person.popitem()后", person)print("person.popitem()的返回值", ret)# 清空person对象person.clear()print("执行了clear()以后:", person)

字典的其他操作

字典的嵌套: 字典用key,列表用索引

china = {    "中国": {        "北京": ["首都", "直辖市"],        "陕西": ["西安", "13朝古都"],        "山东": ["济南", "趵突泉"],        "湖南": ["长沙", "米粉"]    },    "英国": {"伦敦": ["成龙", "英伦对决"]},    "美国": {"华盛顿": ['好莱坞', '美国队长']}}print(china)# 更改北京的信息china["中国"]["北京"][1] = '长城'print(china)

字典的排序:sort()  ASCII排序/数字大小排序

ic = {5: '555', 2: '990', 4: '444'}# 按照 键 排序print(sorted(dic))# 按照 内容 排序print(sorted(dic.values()))

字典的遍历:

dic = {5: '555', 2: '990', 4: '444'}# 默认只打印键值for i in dic:    print(i, end="\t")# 打印key ,valueprint("\n----------------------------------------------------------")# 推荐这种根据键值去查找values,根据下标去查找,效率更高for i in dic:    print(i, dic[i])print("----------------------------------------------------------")# 转换为items的时候会消耗时间for k, v in dic.items():    print(k, v)print("----------------------------------------------------------")# 默认打印出来的是一个元组,例如 (2:222)for i in dic.items():    print(i)

字典转换字符串:str()方法

name = {'name': 'ftl', 'age': 12, 'sex': 'male'}print(str(name))

字符串转换为字典: eval

name = {'name': 'ftl', 'age': 12, 'sex': 'male'}# 字典转换字符ss = str(name)# 字符串转换为原来的类型ss2 = eval(ss)print(type(ss2))

转载于:https://www.cnblogs.com/ftl1012/p/9381959.html

你可能感兴趣的文章
ORA-32001:write to SPFILE requested but no SPFILE is in use
查看>>
PhysX入门教程(全)
查看>>
ASP.NET XML与JSON
查看>>
java.lang.Class.getResource()这哥个方法主要是做什么用
查看>>
Codeforces 948D Perfect Security 【01字典树】
查看>>
android中通过ServerSocket创建端口问题
查看>>
fieldset、legend、display html元素
查看>>
IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目
查看>>
JavaWeb学习-Tomcat
查看>>
MySQL 事务与锁机制
查看>>
优秀程序员==工作时间长的程序员么?
查看>>
docker学习笔记2:容器操作
查看>>
深入浅出设计模式——访问者模式(Visitor Pattern)
查看>>
【转载】zookeeper 分布式锁 实现
查看>>
SQL语法
查看>>
Django(三) ORM 数据库操作
查看>>
【转】iOS静态库 【.a 和framework】【超详细】
查看>>
【转】Android中自定义控件的步骤
查看>>
软件测试工作中的沟通问题
查看>>
format 的用法,9*9乘法表
查看>>