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中的各种函数的使用
May 24 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
详解python里使用正则表达式的分组命名方式
Oct 24 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
python super的使用方法及实例详解
Sep 25 Python
python类中super() 的使用解析
Dec 19 Python
python中图像通道分离与合并实例
Jan 17 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
python基础之while循环语句的使用
Apr 20 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js实现iframe动态调整高度的代码
2008/01/06 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python优先队列实现方法示例
2017/09/21 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
python实现文本界面网络聊天室
2018/12/12 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
实习鉴定范文
2013/12/19 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
主要领导对照检查材料
2014/08/26 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
社区党建工作总结2015
2015/05/13 职场文书
商标侵权律师函
2015/05/27 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书