python-字典与集合

1.字典

在Python中,字典是以键值对(‘key’-‘value’)的形式表现的,每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
dict是无序的;跟多变的 value 不同的是 key 具有唯一性;key 的数据类型必须是固定的不可变的,如:数字、字符串、元组等,而 value 就没有那么多的要求可以为任意的Python数据类型。

dic=    { '1':'lsgo',[2,3]:"lsgo"}
print (dic[[2,3]])
# 
dic=    { '1':'lsgo',[2,3]:"lsgo"}
TypeError: unhashable type: 'list'

增加元素
(1)第一种是通过字典名加中括号的方式直接添加,需要用 = 连接 value 值(也可以实现通过 key 对 value 的修改)

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic)
dic[4]="forever"
print(dic)
dic[3]="lyt"
print (dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
{1: 'I', 2: 'love', 3: 'lsgo', 4: 'forever'}
{1: 'I', 2: 'love', 3: 'lyt', 4: 'forever'}

(2) setdefault() 如果输入的 key 存在于字典中,无论输入的 value 正确与否(也可不输),返回 value 的值,如果 key 不存在于字典之中时,将会把括号内的 key 与 value 自动添加成为字典中一对新的键值对(如果没有 value 的话默认值为 none )

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic.setdefault(2,"lyt"))
print(dic)
print(dic.setdefault(2))
print(dic)
print(dic.setdefault(4,"forever"))
print(dic)
#
love
{1: 'I', 2: 'love', 3: 'lsgo'}
love
{1: 'I', 2: 'love', 3: 'lsgo'}
forever
{1: 'I', 2: 'love', 3: 'lsgo', 4: 'forever'}

(3) update()实现将两个字典的合并(如果在两个字典中有相交的键值对就进行覆盖,如果没有就添加到原字典中)

dic=    { 1:'I',2:"love",3:"lsgo"}
dic2={4:"forever"}
print(dic)
print(dic2)
dic.update(dic2)
print (dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
{4: 'forever'}
{1: 'I', 2: 'love', 3: 'lsgo', 4: 'forever'}

删除元素
(1)pop() 删除指定的键并返回相应的值,如果字典中没有该键则显示 KeyError 错误.

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic)
print(dic.pop(3))
print(dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
lsgo
{1: 'I', 2: 'love'}

(2)popitem() 打印删除的键值对(以元组的形式返回),随机返回并删除字典中的一对键和值(一般删除末尾对)

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic)
print(dic.popitem())
print(dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
(3, 'lsgo')
{1: 'I', 2: 'love'}

(3)clear() 清空字典

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic)
dic.clear()
print(dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
{}

(4)del 可以删除字典中的内容或是直接删除字典

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic)
del dic[3]
print(dic)
del dic
print (dic)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
{1: 'I', 2: 'love'}
 line 6, in <module>
    print (dic)
NameError: name 'dic' is not defined

查找元素
通过 key 查询所对应的 value 值
(1)直接通过字典名加中括号的方式查询,如果 key 值存在则返回其 value 值,如果不存在则报 KeyError 错误

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic[3])
print(dic[4])
#
lsgo
 line 3, in <module>
    print(dic[4])
KeyError: 4

(2)get()如果key值存在则返回其value,如果不存在返回None

dic=    { 1:'I',2:"love",3:"lsgo"}
print(dic.get(3))
print(dic.get(4))
#
lsgo
None

其他
items() 把一个字典转换为列表 ;

dic=    { 1:'I',2:"love",3:"lsgo"}
a=dic.items()
print(a)
print(dic.items())
print(dic)
#
dict_items([(1, 'I'), (2, 'love'), (3, 'lsgo')])
dict_items([(1, 'I'), (2, 'love'), (3, 'lsgo')])
{1: 'I', 2: 'love', 3: 'lsgo'}

copy() 浅copy 和在列表中的功能相似;

dic=    { 1:'I',2:"love",3:"lsgo"}
a=dic.copy()
print(a==dic)
#
True

fromkeys() 返回一个新的命令,它具有可迭代的键值和与值相等的值,简单的来讲就是创建了一个新的字典,逗号前面的为新字典的 key ,后面为每个新字典赋予的 value 值。

dic=    { 1:'I',2:"love",3:"lsgo"}
a=dic.fromkeys(dic,1)
print(dic)
print(a)
#
{1: 'I', 2: 'love', 3: 'lsgo'}
{1: 1, 2: 1, 3: 1}
dic=    { 1:'I',2:"love",3:"lsgo"}

for i in dic:
    print(i,dic[i])
for i ,j in dic.items():
    print(i,j)
    #
    1 I
2 love
3 lsgo
1 I
2 love
3 lsgo

2.集合

建立一个新的集合
·通过大括号 {} 内加内容用逗号( , ) 隔开的方式直接创建一个集合
·使用 set() 方法将已有的列表(或元组)构建成一个无序的集合
集合和字典一样是无序的(无法通过数字进行索引),而且内部的数据类型必须是固定的不可变的
取交集
·intersection() 方法求取两个集合的交集
·运算符 & (且)连接两个集合
· isdisjoint()在两个集合有一个空的交集的时候返回 True ,即当有交集的时候返回 False

set_1={1,2,3}
set_2={3,4,5}
a=set_1.intersection(set_2)
print(a)
print(set_1&set_2)
print(set_1.isdisjoint(set_2))
#
{3}
{3}
False

差集
·difference() 将两个或多个集合的差值作为一个新集合返回
·运算符 -

set_1={1,2,3}
set_2={3,4,5}
print(set_1.difference(set_2))
print(set_1-set_2)
#
{1, 2}
{1, 2}

并集
·union() 返回不同集合的所有元素形成一个新集合
·运算符|

set_1={1,2,3}
set_2={3,4,5}
print(set_1.union(set_2))
print(set_1|set_2)
#
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}

子集
issubset() 确定另外一个集合是否包含此集合

set_1={1,2,3}
set_2={3,4,5}
set_3={3}
print(set_3.issubset(set_1))
print(set_1.issubset(set_3))
print(set_1.issubset (set_2))
#
True
False
False

父集
issuperset() 确定这个集合是否包含另外一个集合

set_1={1,2,3}
set_2={3,4,5}
set_3={3}
print(set_3.issuperset(set_1))
print(set_1.issuperset(set_3))
print(set_1.issuperset (set_2))
#
False
True
False

·symmetric_difference()
把两个集合中不同的部分拿出来形成一个新的集合

set_1={1,2,3}
set_2={3,4,5}
print(set_1.symmetric_difference(set_2))
#
{1, 2, 4, 5}

添加元素
·add()单个元素
·update()多个元素

set_1={1,2,3}
set_2={3,4,5}
print(set_1)
set_1.add("one")
print(set_1)
set_1.update(["one","two","three"])
print(set_1)
#
{1, 2, 3}
{1, 2, 3, 'one'}
{1, 2, 3, 'two', 'one', 'three'}

删除元素
·remove() 删除括号内的指定元素,如果该元素不在集合内,则报错
·pop() 随意删除一个集合内的元素,并返回其删除的值
·discard() 删除括号内的指定元素,如果该元素是集合的一个成员,从集合中移除这个元素,否则什么都不做,返回None
·clear()
·del

set_1={1,2,3,4}
set_1.remove(1)
print(set_1)
print(set_1.discard(2))
print(set_1)
set_1.pop()
print(set_1)
#
{2, 3, 4}
None
{3, 4}
{4}

其他
·运算符 < > == 比较两个集合的关系,返回True 或False。可以用来判断子集和父集。
·通过in 或是 not in 来判断,一个元素是否在集合中。
·len() 获取集合的长度(集合内元素的个数)。
·copy() 浅copy。
·frozenset([iterable])返回一个冻结的集合,冻结后的集合不能添加或删除任何元素。

set_1={1,2,3,4}
set_2={1}
print(set_1>set_2)
print(1 in set_1)
print(len(set_1))
#
True
True
4
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值