【Python】第六课 字典和集合

在python中字典是唯一的映射类型,映射是数学上的一个术语,指两个元素集之间元素相互“对应”的关系。与Java中的Map集合很类似。映射类型区别于序列类型,序列类型以数组的形式存储,通过索引的方式类获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的。

brand=["李宁","耐克","阿迪达斯","Python"]
slogan=["一切皆有可能","Just do it","Impossible is nothing","让编程改变世界"]
print("计算机科学的口号是",slogan[brand.index("Python")])
#运行结果: 计算机科学的口号是 让编程改变世界

两列表的索引和相对的值是没有任何关系的,唯一有联系的就是两个列表间,索引号相同的元素是有关系的。

6.1 字典

6.1.1 创建和访问字典

#字典的创建
dict1={"李宁":"一切皆有可能","耐克":"Just do it","阿迪达斯":"Impossible is nothing","Python":"让编程改变世界"}
print(dict1)
print("计算机科学的口号是",dict1["Python"])
运行结果: 
    {'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing', 'Python': '让编程改变世界'}
	计算机科学的口号是 让编程改变世界

通过以上的案例可以发现,python中的字典的定义与Java中的Map类似,与Json格式也非常类似。

字典的使用很简单,以大括号作为标志性符号,字典是以键值对的方式作为映射关系一一对应,但字典的键必须独一无二,而值可以取任何数据类型。

dict是字典的类名。

#字典的初始化
#定义空字典
dict2={}
print(type(dict2))#<class 'dict'>
dict3=dict((('a',70),('b',170),('c',30),('d',50),('e',60)))
print(dict3)#{'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60}

以上案例中dict()函数中只能有一个元素,因此将多个元素封装成一个元组作为一个元素传入dict()函数中,也可以用以下方式来定义字典:

dict4=dict(a=70,b=170,c=30,d=50,e=60)
print(dict4)
运行结果: {'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60}

也可以给字典中进行追加数据

dict4["f"]=100
dict4["g"]=200
print(dict4)
运行结果: {'a': 70, 'b': 170, 'c': 30, 'd': 50, 'e': 60, 'f': 100, 'g': 200}

这里总结一些创建字典的六种方式:

a=dict(one=1,two=2,three=3)
b={"one":1,"two":2,"three":3}
c=dict(zip(["one","two","three"],[1,2,3]))
d=dict({"one":1,"two":2,"three":3})
e=dict([("one",1),("two",2),("three",3)])
f=dict((("one",1),("two",2),("three",3)))
print(a==b==c==d==e==f)
输出结果为: True

6.1.2 字典的各种内置方法

fromkeys()函数该方法用于创建并返回一个新的字典,有两个参数,第一个参数是字典的键,第二个参数是可选的,是传入键对应的值。如果不提供值,那么默认是None。

dict1={}
print(dict1.fromkeys((1,2,3)))#{1: None, 2: None, 3: None}
print(dict1.fromkeys((1,2,3),"Python"))#{1: 'Python', 2: 'Python', 3: 'Python'}
print(dict1.fromkeys((1,2,3),("one","two","three")))
#{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

该函数将("one","two","three")作为一个元素,将该元素传递给三个索引。

keys(),values()和items()函数的用法

dict2={}
#快速赋值为32个赞
dict2=dict2.fromkeys(range(32),"赞")
print(dict2)
#获得字典的所有键
print(dict2.keys())
#获得字典的所有值
print(dict2.values())
#获得字典的所有键值对
print(dict2.items())

运行结果:

{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'} dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) dict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞']) dict_items([(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), (6, '赞'), (7, '赞'), (8, '赞'), (9, '赞'), (10, '赞'), (11, '赞'), (12, '赞'), (13, '赞'), (14, '赞'), (15, '赞'), (16, '赞'), (17, '赞'), (18, '赞'), (19, '赞'), (20, '赞'), (21, '赞'), (22, '赞'), (23, '赞'), (24, '赞'), (25, '赞'), (26, '赞'), (27, '赞'), (28, '赞'), (29, '赞'), (30, '赞'), (31, '赞')])

get()函数用于从字典中根据键取值,如果不存在,则可以设定默认值

#根据键取值
print(dict2[1])
print(dict2.get(1))
print(dict2.get(32,"不存在该值"))
运行结果:
    赞
	赞
	不存在该值

也可以通过in和not in来判断字典中是否存在这个键

if 32 in dict2:
    print("该键存在")
else:
    print("该键不存在")

**清除字典的所有数据使用clear()函数。**

copy()函数用于拷贝一个字典,属于值传递,不是引用传递。

a={"one":1,"two":2,"three":3}
b=a.copy()
a["two"]=10
print(a)
print(b)
运行结果:
    {'one': 1, 'two': 10, 'three': 3}
	{'one': 1, 'two': 2, 'three': 3}

pop()和popitem()函数的使用

a={"one":1,"two":2,"three":3}
#根据键输出这个值,并从字典中删除这个元素
print(a.pop("two"))
print(a)
#从字典中输出一个键值对,并从字典中删除这个元素,可作为随机取出
print(a.popitem())
print(a)

setdefault()函数和get()函数有点相似,但是setdefault()函数在字典中找不到相应的键时会自动添加至字典中:

a={"one":1,"two":2,"three":3}
print(a.setdefault("two"))
print(a.setdefault(10))
print(a)

update()函数用于更新字典中的数据

pets={"米奇":"老鼠","汤姆":"猫","小白":"猪"}
pets["米奇"]="大老鼠"
print(pets)#{'米奇': '大老鼠', '汤姆': '猫', '小白': '猪'}
pets.update(小白="狗")
print(pets)#{'米奇': '大老鼠', '汤姆': '猫', '小白': '狗'}

字典作为可变字符传入函数的形参时,需要使用**来进行表示

def test(** params):
    print("有%d个参数"%len(params))
    print("它们分别是:",params)
test(**pets)
test(a=1,b=2)
运行结果:
    有3个参数
	它们分别是: {'米奇': '大老鼠', '汤姆': '猫', '小白': '狗'}
	有2个参数
	它们分别是: {'a': 1, 'b': 2}

6.2 集合

在python中集合类似与Java中的set集合,集合中用大括号表示,并不能存在重复的数据。

#集合的使用
num1={}
print(type(num1))#以大括号空值表示的不是集合,而是字典
#<class 'dict'>
num2={1,2,3,4,5}
print(type(num2))#在大括号中没有键值对,只有值,这是集合的格式
#<class 'set'>

集合中不能存在重复的数据

num3={1,2,3,4,5,1,2,3}
print(num3)

运行结果为:{1, 2, 3, 4, 5}

集合和字典类似,数据是无序的,因此不能通过索引值来获取其中的元素。

集合的内建函数是set(),因此可以使用该函数将列表,元组转换成集合。

num3={1,2,3,4,5,1,2,3}
num4=set([1,2,3,4,5,1,2,3])
print(num3)
print(num4)
print(num3==num4)

运行结果:

{1, 2, 3, 4, 5} {1, 2, 3, 4, 5} True

例如,没有学习set集合之前,要去除具有重复数据的列表中的数据,那案例如下:

num3=[1,2,3,4,5,1,2,3]
#通过分片获得副本列表
temp=num3[:]
#将原列表清空
num3.clear()
for x in temp:
    if x not in num3:
        num3.append(x)

print(num3)

但通过set集合的话就简单了

num3=[1,2,3,4,5,1,2,3]
#将列表转换成集合,则会自动去除重复的数据,然后转换会列表
num3=list(set(num3))
print(num3)

但需要注意的是列表的元素是有顺序的,set集合的元素是无需的,当将列表转换后成集合的时候,再转换回列表,可能原本的列表的元素顺序不一定是原本的位置。

通过循环迭代的方式访问集合:

num5={4,5,1,2,3}
for i in num5:
    print(i,end=" ")

运行结果:1 2 3 4 5

可以使用innot in来判断某个元素是否存在于集合中。

使用add()方法可以为集合中添加元素,使用remove()方法可以删除集合中存在的元素。

如果不想让集合中的元素被删除,修改和添加,那么我们可以将集合设置为终态,一旦定义后,不允许被改变,这时候需要使用frozenset()函数将集合进行固定起来。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔触狂放

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值