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实现冒泡,插入,选择排序简单实例
Aug 18 Python
用python找出那些被“标记”的照片
Apr 20 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
python的debug实用工具 pdb详解
Jul 12 Python
python实现大文件分割与合并
Jul 22 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
python logging 日志的级别调整方式
Feb 21 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
python相对企业语言优势在哪
Jun 12 Python
如何对python的字典进行排序
Jun 19 Python
python高级特性简介
Aug 13 Python
python中if和elif的区别介绍
Nov 07 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php实现的双色球算法示例
2017/06/20 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
js 弹出菜单/窗口效果
2011/10/30 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
js模糊查询实例分享
2016/12/26 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
详解python做UI界面的方法
2019/02/27 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
宝塔面板成功部署Django项目流程(图文)
2020/06/22 Python
Python字符串三种格式化输出
2020/09/17 Python
CSS3实例分享--超炫checkbox复选框和radio单选框
2014/09/01 HTML / CSS
党员服务承诺书
2014/05/28 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
工作散漫检讨书
2014/09/16 职场文书
计划生育工作总结2015
2015/04/03 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
反腐倡廉观后感
2015/06/08 职场文书
幼儿园六一主持词
2015/06/30 职场文书
Redis 异步机制
2022/05/15 Redis
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库