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)
View Code

  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)
View Code

  其他方法,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)
View Code

 



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)
View Code

 

 

实例

#!/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、创建空字典使用 { }

 

posted @ 2019-06-03 11:09  ilspring  阅读(128)  评论(0)    收藏  举报