Python数据结构dict常用操作代码实例


Posted in Python onMarch 12, 2020

dict是python中的常用数据结构,应该尽量掌握其使用方法

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中

代码如下

"""
  初始化一个dict的四种方式:
  1. dict() -> 创建一个空的dict
  2. dict(mapping) -> new dictionary initialized from a mapping object's
    (key, value) pairs
  3. dict(iterable) -> new dictionary initialized as if via:
    d = {}
    for k, v in iterable:
      d[k] = v
  4. dict(**kwargs) -> new dictionary initialized with the name=value pairs
    in the keyword argument list. For example: dict(one=1, two=2)
  """

# 第一种方式
d = dict()

# 第二种方式
# d = {"person": {"name": "admin", "age": 12},
#   "animal": {"name": "gaodan", "age": 3},
#   }

# 第三种方式
d = dict({"name": "admin"})
print(d)

# 第四种方式
d = dict(name='admin', age=12)

print(type(d))
print("原字典:%s" % d) # {'name': 'admin', 'age': 12}

# clear, 清空
# d.clear()
# print(d)


# copy 浅拷贝


new_d = d.copy()
print("copy出的新字典:%s" % new_d) # {'name': 'admin', 'age': 12}

new_d['name'] = 'root'
print('修改之后的copy字典:%s' % new_d) # 修改之后的copy字典:{'name': 'root', 'age': 12}
print("修改之后的原字典:%s" % d) # {'name': 'admin', 'age': 12}
# 总结: copy浅拷贝简单数据结构时,创建了一个新的对象,修改新dict中的值,不会引起原有dict中值的变化

print('*' * 50)

d = {"person": {"name": "admin", "age": 12},
   "animal": {"name": "gaodan", "age": 3}
   }

print(d) # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
new_d = d.copy()
new_d['person']['name'] = 'root'

print(new_d) # {'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
print(d) # {'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}

# 总结: 浅拷贝: copy浅拷贝复杂数据结构时,只是指向了这个复杂数据结构的引用,并没有创建一个新的对象.所以修改new_d这个新dict的值时,原dict中的值也发生变化.如果是简单数据结构,不存在这类情况,上面也有示例

"""
   python中的深拷贝 需要 import copy
   copy.deepcopy()
"""

print('--------------------deep copy------------------')
import copy

d = {"person": {"name": "admin", "age": 12},
   "animal": {"name": "gaodan", "age": 3}
   }
print(d)
dd = copy.deepcopy(d)
print(dd) # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
dd['person']['name'] = '哑巴'
print(dd) # {'person': {'name': '哑巴', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
print(d) # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}


# fromkeys, 创建一个新的dict ,key是序列中的值
d = dict.fromkeys(['jet','lily'],{"name":"mam"})
print(d) # {'jet': {'name': 'mam'}, 'lily': {'name': 'mam'}}

# get .取值 ,没有就是None
value = d.get("jet")
print(value) #{'name': 'mam'}

d = {"name":'admin','age':12}

#items 方法
kv = d.items()
for k,v in kv:
   print(k,v)

keys = d.keys()
print(keys) # dict_keys(['name', 'age'])


# pop(key) 移除指定的key 对应的kv
# value = d.pop('name') # 删除name 键值对
# print(value)  # admin
# print(d) # {'age': 12}


# popitem 移除后面的一组item
popitem = d.popitem()
print(popitem) # ('age', 12) 移除了这一对映射关系
print(d) # {'name': 'admin'}  d 还剩下这玩艺



d = {"name":'admin','age':12}

# setdefault(k,v) , 如果原dict有中k, 就返回原dict中k-->v , 否则就将k,v添加到dict中
default_value = d.setdefault('female', 'ali')
print(default_value)
print(d) # {'name': 'admin', 'age': 12, 'female': 'ali'}

default_value = d.setdefault('female', 'jd')
print(default_value) # ali
print(d) # {'name': 'admin', 'age': 12, 'female': 'ali'}

# update. 往dict中添加元素
# 使用update的第一种方式 ,注意key没有加引号
# d.update(book='python',teacher='dog')
print(d) # {'name': 'admin', 'age': 12, 'female': 'ali', 'book': 'python', 'teacher': 'dog'}

#使用update的第二种方式
d.update([('teacher','dog'),{'book','java'}]) #好吊的样子
print(d) #{'name': 'admin', 'age': 12, 'female': 'ali', 'teacher': 'dog', 'book': 'java'}


# values

vs = d.values()
print(vs) #dict_values(['admin', 12, 'ali', 'dog', 'java'])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用pil生成图片验证码的方法
May 08 Python
Python使用chardet判断字符编码
May 09 Python
使用python实现省市三级菜单效果
Jan 20 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python单元测试实例详解
May 25 Python
python实现翻转棋游戏(othello)
Jul 29 Python
Python如何计算语句执行时间
Nov 22 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python 数据可视化之Bokeh详解
Nov 02 Python
Python基于类路径字符串获取静态属性
Mar 12 #Python
对python中return与yield的区别详解
Mar 12 #Python
python 子类调用父类的构造函数实例
Mar 12 #Python
python3中sorted函数里cmp参数改变详解
Mar 12 #Python
Python实现子类调用父类的初始化实例
Mar 12 #Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 #Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 #Python
You might like
谈谈PHP语法(4)
2006/10/09 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
js监听键盘事件示例代码
2013/07/26 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
Google 地图API Map()构造器详解
2016/08/06 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
日常整理python执行系统命令的常见方法(全)
2015/10/22 Python
python编写简单爬虫资料汇总
2016/03/22 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
Python 定义只读属性的实现方式
2020/03/05 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
旷课检讨书1000字
2014/02/14 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
初中成绩单评语
2014/12/29 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Python OpenCV 图像平移的实现示例
2021/06/04 Python
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技