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实现去除代码前行号的方法
Mar 10 Python
Python中用format函数格式化字符串的用法
Apr 08 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
python实现可变变量名方法详解
Jul 01 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
python实现五子棋程序
Apr 24 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
10个顶级Python实用库推荐
Mar 04 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中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
js实现扫雷源代码
2020/11/27 Javascript
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python爬取网易云音乐评论
2018/11/16 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
python代码实现图书管理系统
2020/11/30 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
大学毕业后的十年规划
2014/01/07 职场文书
办公室人员先进事迹
2014/01/27 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
我的祖国演讲稿
2014/05/04 职场文书
应届生求职自荐信
2014/07/04 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
李强优秀员工观后感
2015/06/16 职场文书
校运会加油稿大全
2015/07/22 职场文书
队列队形口号
2015/12/25 职场文书