08_Python 字典


字典是由 键值对组合而成的一种容器,其中 键必须为字符串所有键是互不相同的;值可以为数字、字符串、列表、元组、集合、字典、布尔值或对象等等,值不具有互异性。

创建字典

创建字典有{}和dict()两种方法。
{}方法

  • {}:创建空字典
  • {key1:value1,key2:value2,…,keyn:valuen}:创建含有多个键值对的字典。
d1 = {}
d2 = {"A":1,"B":2,"C":3,"D":4}
d3 = {"A":1,"B":True,"C":"Python","D":[1,2,3],"E":{"a":1}}
print(d1)  # {}
print(d2)  # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
print(d3)  # {'A': 1, 'B': True, 'C': 'Python', 'D': [1, 2, 3], 'E': {'a': 1}}

dict()方法

  • dict():创建空字典。
  • dict(mapping):从键值对(key,value)构成的容器创建字典。
  • dict(iterable):通过遍历可迭代的键值对象创建字典。
  • dict(**kwargs):通过key=value创建字典。


d1 = dict()             				   # 创建空字典    

key = ["A","B","C","D"]
value = [1,2,3,4]
d2 = dict(zip(key,value))				   # 通过zip对象创建字典

data = [10,20,30,40,50]
d3 = dict(enumerate(data,start=1))		   # 通过enumerate对象创建字典

data = [("A",1),("B",2),("C",3),("D",4)]
d4 = dict(data)							   # 通过键值对容器创建字典

d4 = {}
for k,v in zip(key,value):				   # 遍历zip(key,value)创建字典
    d4[k] = v

d5 = dict(one=1, two=2)					   # 通过key=value创建字典

print(d1)   # {}
print(d2)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
print(d3)   # {1: 10, 2: 20, 3: 30, 4: 40, 5: 50}
print(d4)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
print(d5)   # {'one': 1, 'two': 2}


常用方法

在这里插入图片描述

访问

方法说明
dict[key]获取键key对应的值。
dict.get(key)获取键key对应的值。
dict.keys()获取所有的键。
dict.values()获取所有的值。
dict.items()获取所有的键值对。
len(dict)求字典的键值对个数。
data = {"A":1,"B":2,"C":3,"D":4,"E":5}
print(data["A"])        # 1
print(data.get("A"))    # 1

print(data.keys())      # dict_keys(['A', 'B', 'C', 'D', 'E'])
key_list = list(data.keys())
value_list = list(data.values())
print(key_list)         # ['A', 'B', 'C', 'D', 'E']
print(value_list)       # [1, 2, 3, 4, 5]

print(data.items())     # dict_items([('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5)])
key_value_list = list(data.items())
print(key_value_list)   # [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5)]

D = {"A":1,"B":2,"C":3,"D":4,"E":5}
print(len(D))  			# 5


修改

方法说明
dict[key] = value修改某个键对应的值。
dict.setdefault(key,default=None)向字典中插入一个键值对,key为键,default为值,默认为None。如果键存在,则该键对应的值不改变;否则,该键值对被添加进去。
dict.update(D)用字典D来更新原字典。如果原字典中存在D中的键值对,则原字典中的键值对被覆盖;否则,D中的键值对被添加进去。
sorted(object,key=None,reverse=False)Python内置排序函数。
data = {"A":1,"B":2,"C":3,"D":4}
data["A"] = 100
print(data) # {'A': 100, 'B': 2, 'C': 3, 'D': 4}

data.setdefault("E")
print(data) # {'A': 100, 'B': 2, 'C': 3, 'D': 4, 'E': None}
data.setdefault("F",50)
print(data) # {'A': 100, 'B': 2, 'C': 3, 'D': 4, 'E': None, 'F': 50}
data.setdefault("F",0)
print(data) # {'A': 100, 'B': 2, 'C': 3, 'D': 4, 'E': None, 'F': 50}

a = {'one': 1, 'two': 2, 'three': 3}
a.update({'one':4.5, 'four': 9.3})
print(a)    # {'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3}


D = {"B":4,"A":2,"C":5,"E":1,"D":3}
list1 = sorted(D)  # 按键排序,返回排序的键列表 
#list1 = sorted(D.keys())
print(list1)  # ['A', 'B', 'C', 'D', 'E']

list2 = sorted(D.values())  # # 按值排序,返回排序的值列表
print(list2)  # [1, 2, 3, 4, 5]

list3 = sorted(D.items(),key=lambda x: x[0]) 
# x[0]:按键排序,x[1]:按值排序,返回排序后的键值对列表
print(list3)       # [('A', 2), ('B', 4), ('C', 5), ('D', 3), ('E', 1)]
print(dict(list3)) # {'A': 2, 'B': 4, 'C': 5, 'D': 3, 'E': 1}


删除

方法说明
delPython内置函数,直接删除对象。
dict.clear()清空字典。
dict.pop(key)根据键key删除键值对。
dict.popitem()删除字典尾部的键值对。
d1 = {"A":1,"B":2,"C":3,"D":4}
del d1
#print(data)  # NameError: name 'data' is not defined

d2 = {"A":1,"B":2,"C":3,"D":4}
d2.clear()
print(d2)    # {}

d3 = {"A":1,"B":2,"C":3,"D":4}
d3.pop("A")
print(d3)    # {'B': 2, 'C': 3, 'D': 4}

d3.popitem() 
print(d3)    # {'B': 2, 'C': 3}
d3.popitem() 
print(d3)    # {'B': 2}


拷贝

方法说明
=浅拷贝,不产生新对象,只是给对象的引用起别名。
dict.copy()深拷贝,产生新对象和新内存。
d1 = {"A":1,"B":2,"C":3,"D":4}
d2 = d1
print(d2)     # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
print(id(d1)) # 1848109009216
print(id(d2)) # 1848109009216

d3 = d1.copy()
print(d3)     # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
print(id(d1)) # 1848109009216
print(id(d3)) # 1848088410368


遍历字典

D = {"A":1,"B":2,"C":3,"D":4}
## 遍历字典的键
# for key in D:
for key in D.keys():
    print(key,end=" ")
else:
    print()
# A B C D 

## 遍历字典的值
for value in D.values():
    print(value,end=" ")
else:
    print()
# 1 2 3 4 

## 同时遍历字典的键和值
for key,value in D.items():
    print(key,value)
"""
A 1
B 2
C 3
D 4
"""


字典与列表的转换

字典==>列表

D = {"A":1,"B":2,"C":3,"D":4,"E":5}
key_list = list(D.keys())
value_list = list(D.values())
print(key_list)   # ['A', 'B', 'C', 'D', 'E']
print(value_list) # [1, 2, 3, 4, 5]

列表==>字典

key_list = ['A', 'B', 'C', 'D', 'E']
value_list = [1, 2, 3, 4, 5]
new_dict = dict(zip(key_list,value_list))
print(new_dict)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值