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中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
python difflib模块示例讲解
Sep 13 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
详解Python3的TFTP文件传输
Jun 26 Python
Python调用C语言的实现
Jul 26 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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
xml在joomla表单中的应用详解分享
2012/07/19 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
js点击选择文本的方法
2015/02/09 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
jstree的简单实例
2016/12/01 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
Node.js简单入门前传
2017/08/21 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Django重设Admin密码过程解析
2020/02/10 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python实现文字版扫雷
2020/04/24 Python
Pycharm github配置实现过程图解
2020/10/13 Python
CSS3实现复选框动画特效示例代码
2016/09/27 HTML / CSS
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
美术毕业生求职信
2014/02/25 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
小学入学感言
2015/08/01 职场文书