字典(dict)的定义
- key - value键值对的数据集合
- 字典是可变的,无序的,key不能重复,key只能是不可变类型 可hash的
字典(dict)的定义 初始化
d = dict() 或者d = {} #定义空字典
d1 = dict{a = 3,b = 4}
d2 = {'a':10}
dict(**kwargs) 使用可迭代对象和name= value键值对构造字典,不过可迭代对象的元素必须是一个**二元结构**
d3 = dict(((1,'a'), (2,'b')))或者d = dict(([1,'a'], [2,'b']))
dict(mapping, **kwarg) 使用一个字典构造一个字典
d4 = {'a':10,' b':20, 'c':None, 'd':[1,2,3]}
类方法dict.fromkeys(iterble, value)
d5 = dict.fromkeys(range(5))
d = dict.fromkeys(range(5),0)
字典的访问
d[key]: #使用key来访问 返回key对应的值value,key不存在抛出KeyError异常
get(key[,default]): 返回key对应的value 如果key不存在返回缺省值,没有设置缺省值就返回None
d = {‘a' :1, 'b' :3, 'c' : 4}
d.get( d ) #返回None
d.get( d,200 ) #返回缺省值 200
setdefau;t(key[,default]):返回key对应的值value,key不存在就添加kv对,value设置为default,并返回default,如果default没设置,则返回缺省值None
d = {‘a' :1, 'b' :3, 'c' : 4}
d = setdefault('r, 2000) #返回缺省值2000 并添加了kv对到d里面
字典的增加和删除
d[key] = value: 将key对应的值修改为value,**key不存在添加新的kv对**
d = {‘a' :1, 'b' :3, 'c' : 4}
d.['a'] = 123 #返回了’a'=123 修改了
d.['f'] = 233 #添加了新的kv对 ‘f' : 233
update([other]) --> None
使用另一个字典的kv对更新本字典。key不存在就添加,key存在 覆盖已经存在的key对应的值 ,就地修改
d = {‘a' :1, 'b' =:3, 'c' : 4}
d.update(red=1) #添加新的kv对
d.update((('red',2),)) #添加了二元组的可迭代对象
d.update({’red‘:3}) #这3种方式都支持
字典删除
pop(key[,default]):key存在异除它,并返回value,key不存在,返回给定的default。default未设置,key不存在则抛出KeyError异常
d = {‘a' :1, 'b' :3, 'c' : 4}
d.pop(1) #报错 没有1这个key
d.pop(1,100) $返回给的缺省值 100
popitem():移除并返回一个任意的键值对,字典为empty,抛出KeyError异常
d = {‘a' :1, 'b' :3, 'c' : 4}
d.popitem() #随机删除键值对 返回一个任意的键值对
cleat():清空字典
d = {‘a' :1, 'b' :3, 'c' : 4}
d.clear #直接清空字典 要注意 数据存储不容易 多用一会最好
del语句:看着像是删除了一个对象,本质上减少了一个对象的引用 减少了引用计数,del实际上删除的是名称 而不是对象
d = {‘a' :1, 'b' :3, 'c' : 4}
del d # 所有引用计数减一 返回空
字典的遍历,遍历都是On
d = {‘a' :1, 'b' :3, 'c' : 4}
遍历key
for k in d:
print(k) #打印 a b c
for k in d.keys():
print(k) #打印a b c
遍历value
for v in d.value():
print(v) #打印 1 3 4
遍历kv对
for item in d.item():
print(item) #返回(‘a',1, 'b' ,3, 'c' ,4) 二元组
for k,v in d.item():
print(k,v) #返回 a 1 \n b 3 \n c 4 #循环中结构
缺省字典(defaultdict)
OrderedDict:key并不是按照加入顺序排列的,可以使用OrderedDict记录顺序
字典练习
- 用户输入一个数字 打印每一位数字及其重复次数
第一种
nums = input('Please a number>>').strip().lstrip('0')
counter = {}
for c in nums:
if c not in counter.keys():
counter[c] = 0
counter[c] += 1
print(counter)
第二种
nums = input('Please a number>>').strip().lstrip('0')
counter = {}
for c in nums:
counter[c] = counter.get(c,0) + 1
print(counter)
- 数字重复统计
随机产生100个整数 数字范围是【-1000,1000】升序输出这些数字并打印重复的次数
from collections import defaultdict
import random
nums = [random.randint(1, 10) for i in range(10)]
counter = defaultdict(lambda : 0) # 缺省字典 没有的话 补充零
for x in nums:
counter[x] = counter[x] + 1 #从nums里面遍历出来的元素与0配对 x:0
print(counter)
newlist = sorted(set(nums))
for x in newlist:
print(x, counter[x]) #sorted()排序后返回新列表 升序打印
print('---------------------')
print(sorted(counter.items())) #第二种打法 也可以 直接按照字典打法 去重也排序了
- 字符串重复统计
字符表’abcdefghijklmnopqrstuvwxyz‘ 随机挑选两个字母组成字符串,共挑选100个 降序输出所有不同的字符串及其重复次数