python中dict的详细用法以及set集合使用

简介: python中dict的详细用法以及set集合使用

一.dict和list中copy方法画图加代码解释

dict浅拷贝

只拷贝了父目录(根目录)的数据,非容器类型数据本身拷贝的就是数据本身,容器类型(列表,元组,集合,字典)的数据拷贝的是容器的地址引用

dict_data1和dict_data2两者是独立的,但是里面的元素指向同一个,所以一个改变后,另一个也会随之而变

dict_data = {1: [1, 2, 3]}
dict_data2 = dict_data.copy()
print(dict_data2)
print(id(dict_data[1]))
print(id(dict_data2[1]))
print(id(dict_data))
print(id(dict_data2))
dict_data[1][1] = 8
print(dict_data)
print(dict_data2)
结果
{1: [1, 2, 3]}
2501838676224
2501838676224
2501837218560
2501837218752
{1: [1, 8, 3]}
{1: [1, 8, 3]}

dict深拷贝

递归拷贝所有目录的数据,完全在另外内存中复制了一份原字典

图解:

list_data = [1, [2, 3]]
list_data2 = copy.deepcopy(list_data)
print(list_data2)
print(id(list_data))
print(id(list_data2))
print(id(list_data2[0]))
print(id(list_data2[0]))
print(id(list_data[1]))
print(id(list_data2[1]))
list_data[1][0] = 8
print(list_data)
print(list_data2)
结果
[1, [8, 3]]
1999515586368
1999515586112
1999508957488
1999508957488
1999515593024
1999515591232
[1, [8, 3]]
[1, [2, 3]]

二.dict中扩展字典长度(多种方法)

第一种[key] = value

dict_data = {1: 2, 2: 3}
dict_data[3] = 4
print(dict_data)
结果
{1: 2, 2: 3, 3: 4}

第二种setdefault

dict_data = {1: 1, 2: 2, 3: 4}
dict_data.setdefault(4, 5)
print(dict_data)
结果
{1: 1, 2: 2, 3: 4, 4: 5}

第三种update

dict_data = {1: 1, 2: 2, 3: 4}
dict_data1 = {5: 6}
dict_data.update(dict_data1)
print(dict_data)
结果
{1: 1, 2: 2, 3: 4, 5: 6}

三.dict中获取所有的key,获取所有的value,获取所有的itemkey

dict_data = {1: 2, 2: 3, 3: 4}
data = dict_data.keys()
print(data)
结果
dict_keys([1, 2, 3])
values
dict_data = {1: 1, 2: 2, 3: 4}
data = dict_data.values()
print(dict_data, data)
结果
{1: 1, 2: 2, 3: 4} dict_values([1, 2, 4])
items
dict_data = {1: 1, 2: 2, 3: 3}
data = dict_data.items()
print(data)
结果
dict_items([(1, 1), (2, 2), (3, 3)])

四.dict中通过一个不存在的key去获取值(要求不报错)

setdefault
#  如果键不在字典中,则插入值为默认值的键。
dict_data = {1: 1, 2: 2, 3: 4}
data = dict_data.setdefault(4)
print(data)
结果
None
get
# 如果 key 在字典中,则返回 key 的值,否则返回默认值。
dict_data = {1: 1, 2: 2}
data = dict_data.get(3)
print(data)
结果
None

五.定义空集合

data = set()
print(data, type(data))
结果
set() <class 'set'>

六.set中,求差集,求合集,求交集(要求在原集合上操作)

合集
set_data = {1, 3, 5, 6, 7}
set_data1 = {1, 2, 3, 5, 6}
set_data.update(set_data1)  
print(set_data)
结果
{1, 2, 3, 5, 6, 7}
交集
set_data = {1, 3, 5}
set_data1 = {1, 2, 3, 4}
set_data.intersection_update(set_data1)  
print(set_data)
结果
{1, 3}
差集
set_data = {1, 3, 5, 6, 7}
set_data1 = {1, 2, 3, 5, 6}
set_data.symmetric_difference_update(set_data1)  
print(set_data)
结果
{2, 7}
1.添加一个元素
add源码
 add(self, *args, **kwargs): 
        """
        Add an element to a set.
        This has no effect if the element is already present.
        """
将元素添加到集合中
set_data = {1, 3}
set_data.add(2)        
print(set_data)
结果
{1, 2, 3}
2.删除一个元素(使用多种方法)
pop源码
pop(self, *args, **kwargs): 
        """
        Remove and return an arbitrary set element.
        Raises KeyError if the set is empty.
        """
删除并返回第一个元素
set_data = {1, 3, 4, 5, 6, 7}
data = set_data.pop()  
print(data, set_data)
结果
1 {2, 3, 4, 5, 6, 7}
remove 源码
remove(self, *args, **kwargs): 
        """
        Remove an element from a set; it must be a member.
        If the element is not a member, raise a KeyError.
        """
从集合中删除元素
set_data = {1, 3, 4, 5, 7, 8}
set_data.remove(1)  
print(set_data)
结果
{3, 4, 5, 7, 8}
discard 源码
discard(self, *args, **kwargs): 
        """
        Remove an element from a set if it is a member.
        If the element is not a member, do nothing.
        """
如果元素是成员,则从集合中删除该元素
set_data = {1, 3, 5}
set_data.discard(1)  
print(set_data)
结果
{3, 5}
 difference_update 源码
difference_update(self, *args, **kwargs): 
        """ Remove all elements of another set from this set. """
从此集中删除另一组的所有元素。
set_data = {1, 3, 5}
set_data1 = {1}
set_data.difference_update(set_data1) 
print(set_data)
结果
{3, 5}
clear 源码
clear(self, *args, **kwargs): 
        """ Remove all elements from this set. """
从此集中删除所有元素 
set_data = {1, 3}
set_data.clear()        
print(set_data)
结果
set()
目录
相关文章
|
2月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
100 1
思科设备巡检命令Python脚本大集合
|
2月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
46 5
|
2月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
53 6
|
2月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
38 2
|
2月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
38 3
|
1月前
|
Python
Python三引号用法与变量详解
本文详细介绍了Python中三引号(`&quot;&quot;&quot;` 或 `&#39;&#39;&#39;`)的用法,包括其基本功能、如何在多行字符串中使用变量(如f-string、str.format()和%操作符),以及实际应用示例,帮助读者更好地理解和运用这一强大工具。
55 2
|
1月前
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
1月前
|
Java 开发者