Python基本数据类型-dictionary(字典)
Dictionary(字典)
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。
在同一个字典中,键(key)必须是唯一的。
#作用:存多个值,key-value存取,取值速度快
定义:key必须是不可变类型,value可以是任意类型
#优先掌握的操作:
#1、按key存取值:可存可取
#2、长度len
#3、成员运算in和not in
#4、删除
#5、键keys(),值values(),键值对items()
#6、循环
#创建字典,多种方式 commodity={ 'apple':100, 'pear':80, 'banana':24 } print(commodity) #{'apple': 100, 'pear': 80, 'banana': 24} d={} #空字典 print(d) #{} d1=dict() print(d1) #{} # 使用元组作为dict的key #注意:列表不能作为字典的key,因为字典的key必须是不可变类型,列表是可变的,但列表和元组都可以作为字典的value dict2 = {(20, 30):'good', 30:'bad'} print(dict2) #{(20, 30): 'good', 30: 'bad'} #添加元素 d[20]=20 print(d) #{20: 20}
d.append(3) #删除 del d[10]
#pop()函数删除
dict2 = {(20, 30):'good', 30:'bad'}
dict2.pop(30)
print(dict2)
clear()方法 clear() 用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典 d.clear() print(d) #{} #in\not in #判断字典是否包含指定的 key,则可以使用 in 或 not in 运算符。需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的 print('apple' in commodity) #True print('apple' not in commodity) #False #长度 print(len(commodity)) ''' items()、keys()、values(),items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value, 这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象 Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。如下所示用法: ''' # ims=commodity.items() #返回的是dict_items对象 print(ims) #dict_items([('apple', 100), ('pear', 80), ('banana', 24)]) print(list(ims)) print(list(ims)[1]) #返回第2个key-value对 #循环 for key,value in commodity.items(): #commodity.items()\commodity.keys()\commodity.values() print(key,value) 运行结果如下: apple 100 pear 80 banana 24
练习:
1 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于
66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key
的值中
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
s=[11,22,33,44,55,66,77,88,99,90] d={'k1':[],'k2':[]} for i in s: if i>=66: d['k1'].append(i) else: d['k2'].append(i) print(d)
2、统计s='hello alex alex say hello sb sb'中每个单词的个数
结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
s='hello alex alex say hello sb sb' s1=s.split(' ') # print(s1,type(s1)) d={} for key in s1: #三种获取方法,一,get方法 # d[key]=d.get(key,0)+1 #二,if判断 # if key in d: # d[key]+=1 # else: # d[key]=1 #三 用字符串的count方法 d[key]=s.count(key) print(d)
其他方法,set集合方法,重点关注setdefault方法
#利用setdefault解决重复赋值 ''' setdefault的功能 1:key存在,则不赋值,key不存在则设置默认值 2:key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值 d={} print(d.setdefault('a',1)) #返回1 d={'a':2222} print(d.setdefault('a',1)) #返回2222 ''' s='hello alex alex say hello sb sb' dic={} words=s.split() for word in words: #word='alex' dic.setdefault(word,s.count(word)) print(dic) #利用集合,去掉重复,减少循环次数 s='hello alex alex say hello sb sb' dic={} words=s.split() words_set=set(words) for word in words_set: dic[word]=s.count(word) print(dic)
get()方法 get() 方法其实就是根据 key 来获取 value,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误 print(commodity.get('apple')) #100 print(commodity.get('a')) #None print(commodity.get['apple']) #TypeError: 'builtin_function_or_method' object is not subscriptable update()方法 update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去。如下所示: commodity.update({'apple':99,'watermelon':90}) print(commodity)
练习 :
#简单购物车,要求如下:
'''
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,
价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求
用户重新输入
'''
shop_list=[] commodity={ 'apple':100, 'pear':80, 'banana':24 } while True: for key,value in commodity.items(): print('name:{name} price:{price}'.format(name=key,price=value)) choice=input('商品-->').strip() if not choice or choice not in commodity: print('商品名称错误') continue count=input('个数-->') if not count.isdigit(): print('个数错误') continue #添加值假如用列表,不支持添加多个元素,用元组当成一个值传递 shop_list.append((choice,commodity[choice],count)) print(shop_list)
实例
#!/usr/bin/python3 dict = {} dict['one'] = "1 - 菜鸟教程" dict[2] = "2 - 菜鸟工具" tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'} print (dict['one']) # 输出键为 'one' 的值 print (dict[2]) # 输出键为 2 的值 print (tinydict) # 输出完整的字典 print (tinydict.keys()) # 输出所有键 print (tinydict.values()) # 输出所有值
以上实例输出结果:
1 - 菜鸟教程
2 - 菜鸟工具
{'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
dict_keys(['name', 'code', 'site'])
dict_values(['runoob', 1, 'www.runoob.com'])
构造函数 dict() 可以直接从键值对序列中构建字典如下:
实例
>>>dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)]) {'Taobao': 3, 'Runoob': 1, 'Google': 2} >>> {x: x**2 for x in (2, 4, 6)} {2: 4, 4: 16, 6: 36} >>> dict(Runoob=1, Google=2, Taobao=3) {'Runoob': 1, 'Google': 2, 'Taobao': 3}
另外,字典类型也有一些内置的函数,例如clear()、keys()、values()等。
注意:
- 1、字典是一种映射类型,它的元素是键值对。
- 2、字典的关键字必须为不可变类型,且不能重复。
- 3、创建空字典使用 { }。

浙公网安备 33010602011771号