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中dictionary items()系列函数的用法实例
Aug 21 Python
python进阶教程之词典、字典、dict
Aug 29 Python
用Python实现通过哈希算法检测图片重复的教程
Apr 02 Python
Python变量和数据类型详解
Feb 15 Python
Python实现多条件筛选目标数据功能【测试可用】
Jun 13 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
python如何通过twisted搭建socket服务
Feb 03 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
Django与pyecharts结合的实例代码
May 13 Python
基于plt.title无法显示中文的快速解决
May 16 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 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之字符串变相相减的代码
2007/03/19 PHP
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
深入了解Python数据类型之列表
2016/06/24 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python3 kubernetes api的使用示例
2021/01/12 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
素食餐饮项目创业计划书
2014/02/02 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
伊索寓言教学反思
2014/05/01 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
民事起诉状范文
2015/05/19 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
红歌会主持词
2015/07/02 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
Golang map映射的用法
2022/04/22 Golang
详解SQL报错盲注
2022/07/23 SQL Server