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类型为list
print("打印所有的keys,转换dict_keys类型为list:", list(person.keys()))
# 打印嵌套的字典的keys
print("打印嵌套的字典的keys:", person['school'].keys())
print('-------------------------------------------------------------------------')
# 打印所有的values,返回一个dict_keys类型
print("打印所有的values,返回dict_values类型:", person.values())
# 打印所有的values,转换dict_keys类型为list
print("打印所有的values,转换dict_values类型为list:", list(person.values()))
# 打印嵌套的字典的values
print("打印嵌套的字典的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')) # 找不出来后打印None
print(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'] = 13
print("添加信息之后:", 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方法

取值后重新赋值

print('-------------------------------------------------------------------------')
person = {"name": "hhh", "age": 36, "school": {'name': 'xupt', 'headmaster': 'hhh2017'}}
# 打印所有字典信息:
print("打印所有字典信息(旧的):", person)
# 根据键值修改对象
person['age'] = 100
print("根据键值修改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 ,value
print("\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))

Python学习---Python下[字典]的学习的更多相关文章

  1. Python下的OpenCV学习 01 —— 在Linux下安装OpenCV

    一.OpenCV简要介绍 OpenCV是一个跨平台的计算机视觉库,可以运行在Windows.Linux.MacOS等操作系统上.OpenCV提供了众多语言的接口,其中就包含了Python,Python ...

  2. “笨方法”学习Python笔记(1)-Windows下的准备

    Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...

  3. python入门学习:5.字典

    python入门学习:5.字典 关键点:字典 5.1 使用字典5.2 遍历字典5.3 嵌套 5.1 使用字典   在python中字典是一系列键-值对.每个键都和一个值关联,你可以使用键来访问与之相关 ...

  4. 《转》python学习--基础下

    转自http://www.cnblogs.com/BeginMan/archive/2013/04/12/3016323.html 一.数字 在看<Python 核心编程>的时候,我就有点 ...

  5. Python学习---Python下[元组]的学习

    元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ...

  6. 字典的学习2——参考Python编程从入门到实践

    遍历字典 1. 遍历所有键值对 eg1: user_0 = { 'username': 'efermi', 'first': 'enrico', 'last': 'fermi',}for key, v ...

  7. Python学习4(字典的内存分布)

    1.字典:是python数据类型之一,字典通过花括号来包含数据项,字典的每个元素由2个部分组成,键:值,字典是根据键来找对应的值. data = {"name": "Et ...

  8. 学习Python的三种境界

    前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...

  9. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

随机推荐

  1. Android下so注入和hook

    一.前言 总结一下这两天学习的Android注入so文件,通过遍历got表hook函数调用 1.注入so文件 2.so文件中遍历got表hook函数 二.注入so文件 1)注入进程 1.编程思路分为以 ...

  2. js获取当前时间(昨天、今天、明天)

    开发过程中某些前台页面的时间控件我们需要给默认当前时间,jquery可以轻松的帮我们实现,代码如下 1 //昨天的时间 2 var day1 = new Date(); 3 day1.setTime( ...

  3. 万物智联,腾讯云 IoT 边缘计算揭秘——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:现在是万物互联的时代,智能穿戴设备,智能家居,无人商业,改变了我们的生活方式.预计到2021年,全球物联网设数将达到150亿,超过手机 ...

  4. sublime text 3支持GBK编码

    1.安装Package Control: 按Ctrl+~打开命令行,然后复制粘贴下面这一行代码,回车确定: import urllib.request,os; pf = 'Package Contro ...

  5. gulp入门详情

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大 ...

  6. flask用session记录状态

    html <form action="/login" method="POST"> <input type="text" ...

  7. vue-cli脚手架项目实例

    看完了配置,接下来通过一个实例,更清晰地了解这些文件之间的联系,顺带练习练习vue相关知识. 1.安装 打开命令行控制器,系统自带cmd或者git bash等都可以,按照顺序输入如下指令,耐心等待每一 ...

  8. webstorm添加自定义代码块

    widnow下使用alt+ctrl+s 调出setting面板 mac下使用command+,(逗号)调出Preferences面板 搜索live template选中js,在javascrpt 模板 ...

  9. 54个提高PHP程序运行效率的方法(转载)

    原文地址:http://www.jb51.net/article/69677.htm 1. 如果一个方法可静态化,就对它做静态声明.速率可提升至4倍. 2. echo 比 print 快. 3. 使用 ...

  10. React Native之React速学教程(上)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...