映射:映射可以使用任意不可变对象标识元素。最常用的是字符串和元祖
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 "", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
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]))
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))