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 25 Python
python遍历文件夹并删除特定格式文件的示例
Mar 05 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
python中global用法实例分析
Apr 30 Python
python基础教程之五种数据类型详解
Jan 12 Python
Python实现的科学计算器功能示例
Aug 04 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
Django框架models使用group by详解
Mar 11 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
python 实现弹球游戏的示例代码
Nov 17 Python
python中yield的用法详解
Jan 13 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 类型转换函数intval
2009/06/20 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
BootStrap中
2016/12/10 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
python中的闭包函数
2018/02/09 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python3 拼接字符串的7种方法
2018/09/12 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python流程控制常用工具详解
2020/02/24 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
信用社员工先进事迹材料
2014/02/04 职场文书
《凡卡》教学反思
2014/04/09 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书