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的*args和**kwargs用法
Nov 01 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
Python网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python MySQLdb使用教程详解
Mar 20 Python
Python3实现的字典遍历操作详解
Apr 18 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python内置异常类型全面汇总
May 28 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 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代码片段
2015/09/24 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
Python grpc超时机制代码示例
2020/09/14 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
大学学习生活感言
2014/01/18 职场文书
高三体育教学反思
2014/01/29 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
市场策划求职信
2014/08/07 职场文书
杜甫草堂导游词
2015/02/03 职场文书
会计岗位职责
2015/02/03 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android