返回顶部
首页 > 资讯 > 后端开发 > Python >Python映射类型之dict详解
  • 240
分享到

Python映射类型之dict详解

2024-04-02 19:04:59 240人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录映射类型—dictlist(d)len(d)d[key]d[key]=valuedeld[key]keyinditer(d)clear()copy()claSSMet

映射类型 — dict

字典可用多种方式来创建:

  • 使用花括号内以逗号分隔键: 值对的方式: {‘jack’: 4098, ‘sjoerd’: 4127} or {4098:‘jack’, 4127: ‘sjoerd’}
  • 使用字典推导式: {}, {x: x ** 2 for x in range(10)}
dict_a = {key: value for key in 'python' for value in range(2)}
list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
dict_c = {key: value for key, value in list_phone}
  • 使用类型构造器: dict(), dict([(‘foo’, 100), (‘bar’, 200)]), dict(foo=100,bar=200)

字典所支持的操作:

list(d)

返回字典d 中使用的所有键的列表

len(d)

返回字典d 中的项数

d[key]

返回d 中以key 为键的项。如果映射中不存在key 则会引发KeyError。

如果字典的子类定义了方法__missing__() 并且key 不存在,则d[key] 操作将调用该方法并附带键key 作为参数。d[key] 随后将返回或引发__missing__(key) 调用所返回或引发的任何对象或异常。没有其他操作或方法会发起调用__missing__()。如果未定义__missing__(),则会引发KeyError。missing() 必须是一个方法;它不能是一个实例变量:

>>> class Counter(dict):
... def __missing__(self, key):
... return 0
>>> c = Counter()
>>> c['red']
0
>>> c['red'] += 1
>>> c['red']
1

上面的例子显示了collections.Counter 实现的部分代码。还有另一个不同的__missing__方法是由collections.defaultdict 所使用的。

d[key] = value

将d[key]设为value。

del d[key]

将d[key] 从d中移除。如果映射中不存在key 则会引发KeyError。

key in d

如果d中存在键key 则返回True,否则返回False。

iter(d)

返回以字典的键为元素的迭代器。这是iter(d.keys()) 的快捷方式。

clear()

移除字典中的所有元素。

copy()

返回原字典的浅拷贝

深copy

若你想彻底使2个dict完全独立,无论有多少层数据。那就要用Python工具包里的一个工具了

import copy
data = {
    "name":"alex",
    "age":18,
    "scores":{
        "语文":130,
        "数学":60,
        "英语":98,
    }
}
d2 = data.copy()
d3 =copy.deepcopy(data)
d3["scores"]["语文"] = 149
print(d3)
print(data)

classmethod fromkeys(iterable[, value ]) fromkeys()

函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值

seq = ('Google', 'Runoob', 'Taobao')
thisdict = dict.fromkeys(seq)
print "新字典为 : %s" %  str(dict)
thisdict = dict.fromkeys(seq, 10)
print "新字典为 : %s" %  str(thisdict)
"""
新的字典为 : {'age': None, 'name': None, 'sex': None}
新的字典为 : {'age': 10, 'name': 10, 'sex': 10}
"""

get(key[, default ])

如果key 存在于字典中则返回key 的值,否则返回default。如果default 未给出则默认为None,因而此方法绝不会引发KeyError。

items()

  • 以列表返回视图对象,是一个可遍历的key/value对
  • dict.keys()dict.values()dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化
tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Value : %s" %  tinydict.items()) # Value : dict_items([('Age', 7), ('Name', 'Runoob')])

keys()

返回由字典键组成的一个新视图

dict.keys()dict.values() dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化

a = {"a": 3, "b": 2}
print(a.keys()) # <class 'dict_keys'>

pop(key[, default ])

删除字典给定键 key 所对应的值,返回值为被删除的值。

site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
element = site.pop('name')
print('删除的元素为:', element)
print('字典为:', site)
"""
删除的元素为: 菜鸟教程
字典为: {'alexa': 10000, 'url': 'www.runoob.com'}
"""

popitem()

  • popitem() 方法随机返回并删除字典中的最后一对键和值。
  • 如果字典已经为空,却调用了此方法,就报出KeyError异常。
  • 返回一个键值对(key,value)形式,按照 LIFO(Last In First Out后进先出法)顺序规则,即最末尾的键值对。
site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)  
print(site)

reversed(d)

返回一个逆序获取字典键的迭代器。这是reversed(d.keys()) 的快捷方式

setdefault(key[, default ])

setdefault() 方法和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

tinydict = {'Name': 'Runoob', 'Age': 7}
print ("Age 键的值为 : %s" %  tinydict.setdefault('Age', None))
print ("Sex 键的值为 : %s" %  tinydict.setdefault('Sex', None))
print ("新字典为:", tinydict)

update([other ])

update() 函数把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里

tinydict = {'Name': 'Runoob', 'Age': 7}
tinydict2 = {'Sex': 'female' }
tinydict.update(tinydict2)
print ("更新字典 tinydict : ", tinydict)

values()

返回一个视图对象,dict.keys()、dict.values() 和 dict.items() 返回的都是视图对象( view objects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化

a = {"a": 3, "b": 2}
print(a.values()) # dict_values([3, 2])

d | other

合并d 和other 中的键和值来创建一个新的字典,两者必须都是字典。当d 和other 有相同键时,other 的值优先。3.9才支持

a = {"apple": 3, "banana": 4}b = {"grape": 5, "banana": 8}print(a | b)

d |= other

  • 用other 的键和值更新字典d ,other 可以是mapping 或iterable 的键值对。当d 和other 有相同键时,other 的值优先。
  • 3.9 新版功能
a = {"one": 1, "two": 2, "three": 3}
a |= {"three": 30, "four": 4, "five": 5}
print(a)
a = {"apple": 3, "banana": 4}
b = {"grape": 5, "banana": 8}
a |= b
print(a)
"""
{'one': 1, 'two': 2, 'three': 30, 'four': 4, 'five': 5}
{'apple': 3, 'banana': 8, 'grape': 5}
"""

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: Python映射类型之dict详解

本文链接: https://lsjlt.com/news/142509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python映射类型之dict详解
    目录映射类型—dictlist(d)len(d)d[key]d[key]=valuedeld[key]keyinditer(d)clear()copy()classmet...
    99+
    2024-04-02
  • Python映射类型中dict怎么用
    这篇文章给大家分享的是有关Python映射类型中dict怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。映射类型 - dict字典可用多种方式来创建:使用花括号内以逗号分隔键: 值对的方式: {&ls...
    99+
    2023-06-29
  • Hibernate映射之基本类映射和对象关系映射详解
    回想一些我们在没有学习ssh的时候,我们建立数据库的表时,首先是数据库建模E-R图,然后再通过实体模型来建立关系模型,再建立相应的表。实体间存在三种关系,一对一,一对多(或者说多对一),多对多。而如今我们要根据类来映射相应的表,那只能是通过...
    99+
    2023-05-31
    hibernate 对象 映射
  • TypeScript映射类型详情
    目录1.映射类型(Mapped Types)2.映射修饰符(Mapping Modifiers)3.通过 as 实现键名重新映射(Key Remapping via as)4.深入探...
    99+
    2024-04-02
  • Python数据类型详解(四)字典:dict
    一.基本数据类型   整数:int   字符串:str(注:t等于一个tab键)   布尔值: bool   列表:list   列表用[]   元祖:tuple   元祖用()   字典:dict 注...
    99+
    2022-06-04
    字典 详解 数据类型
  • Elasticsearch常见字段映射类型之scaled_float解读
    目录一、概述ES中支持的常见的数字类型有什么时候使用scaled_float类型呢?scaled_float类型注意事项二、实践(1)、创建包含类型为scaled_float的字段(...
    99+
    2022-11-21
    Elasticsearch字段映射类型 scaled_float Elasticsearch scaled_float
  • Python-Dict&Set类型
    Python的另外两种重要的数据类型Dict和Set,可以快速按照关键字检索信息 Dict - 字典 list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的...
    99+
    2023-01-31
    类型 Python Dict
  • python可视化之颜色映射详解
    本文主要介绍一下在学习可视化过程里遇到的一些情况 比如cmap=plt.cm.Blues的映射 import matplotlib.pyplot as plt from rand...
    99+
    2024-04-02
  • JPA之映射mysql text类型的问题
    目录JPA之映射mysql text类型问题背景解决方案JPA各种类型映射处理JPA之映射mysql text类型 问题背景 jpa如果直接映射mysql的text/longtext...
    99+
    2024-04-02
  • 详解TypeScript映射类型和更好的字面量类型推断
    目录概述使用映射类型构建 Object.freeze()映射类型的语法更直观解释更多映射类型的示例映射类型的实际用例更好的字面量类型推断更好的 const 变量推断更好的只读属性推断...
    99+
    2024-04-02
  • 深入了解TypeScript中的映射类型
    目录1. 基本概念(1)索引访问类型(2)索引签名(3)联合类型(4)keyof 类型运算符(5)元组类型(6)条件类型2. 映射类型(1)初体验(2)概念(3)实例3. 实用程序中...
    99+
    2022-11-13
    TypeScript映射类型 TypeScript映射
  • python数据类型dict、list、
    在测试时候我们经常会碰到要把读取的数据转成自己想要类型,比如字典转字符串、字符串转列表等等。 下面通过例子介绍一下:一、字典转字符串:(不改变原始字典a的值) 转元组:(不改变原始字典a的值)这里只把字典的key转过来,如果要把值转过来,这...
    99+
    2023-01-31
    数据类型 python list
  • Python 内置类型 dict, li
    近段时间发现一个 Python 连接数据库的连接是线程不安全的,结果惹得我哪哪儿都怀疑变量的多线程是否安全的问题,今天终于找到了正确答案,那就是 Python 内置类型 dict,list ,tuple 是线程安全的。 请参考官方...
    99+
    2023-01-31
    类型 Python li
  • GoREFLECTLibrary反射类型详解
    目录一、反射概述二、反射类型对象基本数类型的 反射类型对象引用数据类型的 反射类型对象结构体的 反射类型对象指针的 反射类型对象一、反射概述 反射是指程序在运行期间对程序本身进行访问...
    99+
    2024-04-02
  • 解组 yaml 将 dict 键映射到结构属性
    php小编西瓜今天为大家介绍一种非常有用的技巧——将 YAML 解组为字典,并将键映射到结构属性。YAML 是一种轻量级的数据序列化格式,常用于配置文件和数据交换。通过解组 YAML,...
    99+
    2024-02-09
  • java高级用法之JNA中使用类型映射
    目录简介类型映射的本质TypeMapperNativeMapped总结简介 JNA中有很多种映射,library的映射,函数的映射还有函数参数和返回值的映射,libary和函数的映射...
    99+
    2024-04-02
  • TypeScript 映射类型是怎样的
    这期内容当中小编将会给大家带来有关TypeScript 映射类型是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:TypeScript 的官方文档早已更新,但我能找到的中文文档都还停留...
    99+
    2023-06-22
  • Hibernate中有哪些映射类型
    Hibernate中有哪些映射类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.Hibernate内置映射类型1).Java基本类型的Hibernate映射类型Java类型...
    99+
    2023-06-17
  • 浅谈hibernate之映射文件VS映射注解
    前言对于java开发者而言,注解应该不是一个陌生的概念,早在JavaSE阶段,例如@Override标记重写父类方法或实现接口方法,@Test标记单元测试方法,所以我们可以简单地把它理解为一种有特殊含义的标记...在开发过程中,我们还可以用...
    99+
    2023-05-31
    hibernate 注解映射 映射文件
  • 基于@RequestMapping 用法详解之地址映射
    目录@RequestMapping之地址映射引言:简介:1、value,method;2、consumes,produces;3、params,headers;示例:1、value/...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作