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中的列表与位运算符
Oct 12 Python
Python基于select实现的socket服务器
Apr 13 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
python 队列详解及实例代码
Oct 18 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
python判断无向图环是否存在的示例
Nov 22 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
Python页面加载的等待方式总结
Feb 28 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
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
elemetUi 组件--el-upload实现上传Excel文件的实例
2017/10/27 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
python批量提取word内信息
2015/08/09 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python 求10个数的平均数实例
2019/12/16 Python
执行Python程序时模块报错问题
2020/03/26 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
旅游管理专业大学生职业规划书
2014/02/27 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
社区文明倡议书
2015/04/28 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
如何Python使用re模块实现okenizer
2022/04/30 Python
MySQL事务的隔离级别详情
2022/07/15 MySQL