字典类型-课堂笔记整理

字典类型

一:基本使用
1 用途:用来存多个值,但每一个值都有一个key与之对应,key对值有描述性的功能
当存储多个值表示的不同的状态时,一般用字典。
注意:字典的key值必须是可hash的,必须是不可变类型

2 定义方式:{}内用逗号分隔开多个元素,每一个元素都是key:value的形式
value可以是任意数据类型,但是key必须为不可变类型,key通常应该是字符串类型,数字,浮点型不具有描述性。
d={'x':1,'y':2} #d=dict({'x':1,'y':2})
d=dict(a=1,b=2,c=3) #{'a': 1, 'b': 2, 'c': 3} # 字典的简单创建方式
print(d)


dic={1:'a',0:'b',1.1:'c',(1,2,3):'d'} # 这些理论上都可以,但是通常用字符串对值进行描述
print(dic[1])
print(dic[0])
print(dic[1.1])
print(dic[(1,2,3)])
dic={[1,2,3]:'a'} # key是字典和列表时会报错,因为字典和列表是可变的,不可hash
dic={{'x':1}:'a'}


3 常用操作+内置的方法
优先掌握的操作:
1、按key存取值:可存可取
d={'x':1,'y':2}
d['x']=100
print(d)
d['z']=3 # 字典中不存在这个key也不会报错,是添加字典键值对的一种方法。
print(d)

l=['a','b'] # 在列表里没有2这个索引会报错
l[2]='c'

2、长度len
d={'x':1,'y':2}
print(len(d)) # 2
3、成员运算in和not in
d={'x':1,'y':2}
print('x' in d) # True 只能判断key是否在字典里。
print(1 in d) # False

4、删除
d={'x':1,'y':2}
del d['x'] # 删除键值对
print(d)
res=d.pop('y') # 字典里pop()里面是key值
print(d) {"x":1} # 删除key即删除y的键值对
print(res) # 2 # 有返回值,是key 为y对应的值。

res=d.popitem() # 随机删除
print(d) # {'x': 1}
# ('y', 2) # 返回值是一个元组,里面有key,value值,逗号分开
print(res)

d={'a':1,'b':2,'c':3,'d':4} # 循环键(key)。
for k in d:
print(k)

a
b
c
d

l=[1,2,3] # del 同样适用于字典
del l[1]
print(l)

dic = {"a":"v","d":"t"}
del dic["a"]
print(dic)

5、键keys(),值values(),键值对items()
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}
names=[]
# for k in msg_dic: # 取出字典的键
# names.append(k)
# print(names)
# values=[] # 取出字典的值
# for k in msg_dic:
# values.append(msg_dic[k])
# print(values)

# keys=msg_dic.keys() # 生成器
# print(keys)
# for k in keys: # 通过for循环取出所有的键
print(k)
l=list(keys) # 惰性序列用list转换为列表
print(l)

vals=msg_dic.values() # 同上,value的生成器
print(vals)
print(list(vals))

print(msg_dic.items())
print(list(msg_dic.items())) # 字典通过items直接转换成列表 *****

6、循环
msg_dic={
'apple':10,
'tesla':100000,
'mac':3000,
'lenovo':30000,
'chicken':10,
}

for k in msg_dic:
print(k,msg_dic[k])

只取key
for k in msg_dic.keys(): ****
print(k,msg_dic[k])

只取value
for v in msg_dic.values(): ****
print(v)

取key和value
for k,v in msg_dic.items(): #k,v=('apple', 10) *****
print(k,v)

需要掌握的内置方法(****)
d={'x':1,'y':2,'z':3}
v=d.get('xxxx') # get取值,如果key不存在会返回None,不会报错
print(v)
print(d['xxxxxxx']) # 直接用dic[key]取值,如果key不存在,会报错

更新原字典
d={'x':1,'y':2,'z':3}
d1={'a':1,'x':1111111}
d.update(d1) # 括号里面是要插入到元字典里的。
print(d)
原字典的"x"对应的值变为11111111 ,原来没有"a"这个键,直接把键值对更新到里面。
{'x': 1111111, 'y': 2, 'z': 3, 'a': 1}

l=['name','age','sex']
d={}
for k in l: # 用循环创建字典,类似fromkeys的源代码
d[k]=None
d=dict.fromkeys(l,None) # 创建字典的初始形态。
print(d)


info.setdefault
info={'name':'egon','age':18,'sex':'male'}

如果字典中有setdefault指定的key,那么不改该key对应的值,返回原的value
res=info.setdefault('name','EGON_NB')
print(info)
print(res)

如果字典中没有setdefault指定的key,那么增加一个key:value,返回新的value
info.setdefault('height',1.80)
print(info)

info={'age':18,'sex':'male'}
v=info.setdefault('name','浩哥')
print(v)


统计s = 'hello alex alex say hello sb sb'中每个单词的个数
s = 'hello alex alex say hello sb sb'
l = s.split()
dic = {}
for k in l:
if k not in dic:
dic[k] = 1
else:
dic[k] += 1
print(dic)

s = 'hello alex alex say hello sb sb'
l = s.split()
print(l)
d = {}
for word in l: # word= 'hello'
if word not in d:
d[word] = 1 # {'hello':2, 'alex':2,'say':1}
else:
d[word] += 1
print(d)

s='hello alex alex say hello sb sb'
l=s.split()
print(l)
d={}

# d={'hello':2,'alex':2}
for word in l: #word='alex'
d[word]=l.count(word) #d['alex']=2
d.setdefault(word,l.count(word)) # 用setdefault,如果存在相同的key,setdefault不会再去进行计算。

print(d)


二:该类型总结
1 存一个值or存多个值
可以存多个值,值都可以是任意类型,而key必须是不可变类型,通常应该是不可变类型中字符串类型

2 有序or无序
无序

3 可变or不可变

d={'x':1,'y':2}
print(id(d))
d['x']=1111
print(id(d))

猜你喜欢

转载自www.cnblogs.com/Roc-Atlantis/p/9118805.html