Python学习:字典和集合

映射:映射可以使用任意不可变对象标识元素。最常用的是字符串和元祖

Python中唯一内建的映射类型是字典

一、 字典

字典中的键是唯一的

创建和访问字典
字典标志性符号,就是用大括号{ }定义,是Python中唯一的映射类型,指的是两个元素集之间元素的相互“对应关系。它和序列不同,字典讲求映射,序列讲求顺序。
字典的键必须是独一无二的,但是值可以取任何类型,但必须是不可以改变的。

dict1 = {"英语":"Englist","中文":"Chinese"}	#“英语”和“中文”称为键,“English”和“Chinese”是其对应的值
#创建字典的方式:
dict1 ={"狗":"看家","猪":"卖钱","人":"学习"}
dict1 = dict((('a',1),('b',2),('c',3),('d',4)))
dict1 = dict(a=1,b=2,c=3,d=4)	#此时键的位置不能加上字符串的引号,否则报错
dict1['d']=67	#修改键的值,若键不存在则创建新键
# 结果值:dict1 = {'b': 2, 'd': 67, 'c': 3, 'a': 1}

fromkeys():创建并返回一个新的字典,含有两个参数,第一个是字典的键,第二个是传入键对应的值(可选的)

dict1 = {}
a= dict1.fromkeys((1,2,3))	#还可以写成{}.fromkeys((1,2,3))
# 或者直接写为:a= dict.fromkeys((1,2,3))	
# 第二个参数如果不提供则默认为空  a = {1: None, 2: None, 3: None}
 a= dict1.fromkeys((1,2,3),('a','b','c'))
# 结果 {1: ('a', 'b', 'c'), 2: ('a', 'b', 'c'), 3: ('a', 'b', 'c')}

keys():返回字典的键;values():返回字典中的所有值;items():返回字典中的所有的键对值

a= dict1.fromkeys(range(10),'good')
a.keys()	#返回字典的键
# dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

values() 返回字典中所有的值

 a.values()	#返回字典中所有的值
# dict_values(['good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good', 'good'])

items () 返回字典中的所有键对值

a.items ()	#返回字典中的所有键对值
#dict_items([(0, 'good'), (1, 'good'), (2, 'good'), (3, 'good'), (4, 'good'), (5, 'good'), (6, 'good'), (7, 'good'), (8, 'good'), (9, 'good')])

get():当键并不存在时,get()不会报错,只是默默返回一个None,表示啥都没找到。但是可以指定找不到数据时返回的值;setdefault()找不到对应的键时会自动添加。

# a = {'one':1,'two':2}
 a.get(11)
a.setdefault('three')
# 找不到对应的键自动添加 a = {'one': 1, 'three': None, 'two': 2}

clear():清空一个字典,清除字典中的所有项
copy():复制字典,复制一个相同键-值对的新字典

#clear():清空一个字典,清除字典中的所有项
a.clear()
#copy():复制字典,复制一个相同键-值对的新字典
a ={'狗':'看门'}
c = a.copy()	#c = {'狗': '看门'} 

pop():给定键弹出对应的值,然后将这个键从字典中移除
popitem():弹出一个随机的项,如果想一个一个移除并处理项,这个方法十分有用

# b =  {'one':1,'two':2}
b.pop()
b.popitem()

update 方法:可以利用一个字典项更新另外一个字典
提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖
在这里插入图片描述

二、 集合

创建集合:一是直接用花括号 { }括起来,二是set()函数

#创建集合有两种方法,一是直接用花括号{}括起来,二是set()函数
set1 = {'a','b','c'}
set2 =set(['a','b','c'])
# set2 ==set1
#集合的作用可以去除列表中重复的元素
# temp = [1, 2, 3, 5, 4, 23, 5, 1, 'a', 'b', 'a']
list3 = list(set(temp))	
# list3 = [1, 2, 3, 4, 5, 'b', 23, 'a']	但是需要注意的是列表的前后顺序会被改变(自动把无序变为有序)

访问集合
集合中的元素时无序的,不能像序列那样用下标来进行访问,可以使用迭代把集合中的数据一个一个读取出来。

# 使用迭代方法,将集合中数据一个一个读取出来
set1 = {1,2,3,4,5,2,3,1}
for each in set1:
    print(each,end=' ')
# 使用add()方法为集合添加元素
set1.add(6)
# 使用remove()方法删除集合中元素
set1.remove(2)

== 不可变集合==
当希望集合中数据具有稳定性,不可更改时,可以使用frozenset()函数。

set1 = frozenset(set1)
set1.add(3)	#更改时,会报错
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'

三、 补充

  1. 字典示例:简单数据库
people = {
    'Alice':{
        "phone":"2341",
        "addr":"Beijing"
    },
    "Beth":{
        "phone":"1234",
        "addr":"Shanghai"
    },
    "Cecil":{
        "phone":"5678",
        "addr":"Guangzhou"
    }
}

labels ={
    "phone":"Phone number",
    "addr":"Address"
}

name = input("Name:")

request = input("Phone number(p) or address(a):")

if request == "p": key = "phone"
if request == "a": key = "addr"

if name in people:
    print("%s's %s is %s." % (name,labels[key],people[name][key]))
  1. 字典的格式化字符串
    在每个转换说明符中的 % 字符后面,可以加上键(用圆括号括起来的),后面再跟上其他说明元素
    在这里插入图片描述
  2. get 方法:当使用get 访问一个不存在的键时,不会出现异常,会得到None,也可以自己定义 默认值,替换None
    在这里插入图片描述
    使用 get方法的简单数据库
people = {
    'Alice':{
        "phone":"2341",
        "addr":"Beijing"
    },
    "Beth":{
        "phone":"1234",
        "addr":"Shanghai"
    },
    "Cecil":{
        "phone":"5678",
        "addr":"Guangzhou"
    }
}

labels ={
    "phone":"Phone number",
    "addr":"Address"
}

name = input("Name:")

request = input("Phone number(p) or address(a):")

if request == "p": key = "phone"
if request == "a": key = "addr"
# name 不存在,将person改为 空字典
person =  people.get(name,{})
label = labels.get(key,key)
# 替换默认值 None
result = person.get(key,"not available")
print("%s's %s is %s." % (name,label,result))

在这里插入图片描述

  1. 循环遍历字典元素
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南淮北安

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

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

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

打赏作者

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

抵扣说明:

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

余额充值