小甲鱼零基础入...

【py小甲鱼笔记】-字典

2020-06-22  本文已影响0人  夕颜00

1、映射类型
字典是Python中唯一的映射类型,映射是数学上的一个术语。指两个元素集之间元素相互“对应”的关系。

#建立映射关系
brand = ['李宁','耐克','阿迪达斯','鱼C工作室']
slogan = ['一切皆有可能','Just do it','Impossible is nothing','让编程改变世界']

l = brand.index('鱼C工作室')
print("鱼C工作室的口号是:",slogan[l])

2、创建字典
字典有自己标志性符号大括号({})来定义。字典由多个键及其对应的值来共同构成,每一对键值组合称为项。

字典的键必须是独一无二的,而值可以取任何数据类型,但必须是不可变的(如字符串、数或者元组)

#声明一个空字典
empty = {}
print(empty)         # {}
print(type(empty))    # <class 'dict'>
#方式一、创建字典
dict1 = {'李宁':'一切皆有可能','耐克':'Just do it','阿迪达斯':'Impossible is nothing','鱼C工作室':'让编程改变世界'}
print(dict1)
#{'李宁': '一切皆有可能', '耐克': 'Just do it', '阿迪达斯': 'Impossible is nothing', '鱼C工作室': '让编程改变世界'}
#方式二:使用dict()来创建字典
dict1 = dict((('F',70),('i',105),('s',115),('h',104),('c',67)))
print(dict1)
# {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

#上面的方式括号太多,我们改进为下面的
dict1  = dict(F = 70,i = 105,s =115,h = 104,c =67)
#注意键的位置不能加上字符串的引号,否则会报错


#错误的方式
dict1  = dict('F' = 70,'i' = 105,'s' =115,'h' = 104,'c'=67)    
#报错   SyntaxError: keyword can't be an expression
#方式三、直接给字典的键赋值的方式来创建字典

dict1 = {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

#通过直接给字典的键赋值的方式来创建字典,如果键存在,则修改键对应的值,如果不存在,则创建一个新的键并赋值
dict1['x'] = 88    #创建一个新的键‘x',并赋值88
dict1['y'] = 88    #创建一个新的键‘y',并赋值88
print(dict1)    #{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 88, 'y': 88}

dict1['x'] = 120   #修改键‘x'的值为120
print(dict1)    #{'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67, 'x': 120, 'y': 88}

2.1创建字典的五种方式:

a = dict(one =1,two=2,three=3)
b = {'one':1,'two':2,'three':3}
c = dict(zip(['one','two','three'],[1,2,3]))
d = dict([('two',2),('one',1),('three',3)])
e = dict({'three':3,'one':1,'two':2})

print(a)
print(b)
print(c)
print(d)
print(e)


"""
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
{'one': 1, 'two': 2, 'three': 3}
{'two': 2, 'one': 1, 'three': 3}
{'three': 3, 'one': 1, 'two': 2}

"""

3、访问字典
字典是通过key来取值的,这个列表通过索引来取值有区别

dict1 = {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}

print(dict1['F'])    # 70   #通过key来取值

dict1['i'] = 120     #修改‘i'的值为 120
print(dict1)

#获取所有的键
print(dict1.keys())    # dict_keys(['F', 'i', 's', 'h', 'c'])
# 获取所有的值
print(dict1.values())  # dict_values([70, 120, 115, 104, 67])
#获取所有的键值对
print(dict1.items())   # dict_items([('F', 70), ('i', 120), ('s', 115), ('h', 104), ('c', 67)])

循环dict 取值

#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用  #这个方法很好,记住
    print(k,v)
    


dict1 = {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67}
for i ,j in dict1.items():
    print(i,j)

'''
结果:
F 70
i 105
s 115
h 104
c 67

'''

4、各种内置的方法
要点:通过dir(dict)查出所有的内置函数,再通过help(dict)查看帮助文档 ,并可以查看具体的使用方法,如help(dict.clear),help(dict.keys)的帮助文档

for each in dir(dict):
    print(each)

"""
clear
copy
fromkeys
get
items
keys
pop
popitem
setdefault
update
values
"""

4.1 fromkeys()

fromkeys()方法用于创建并返回一个新的字典,它有两个参数,第一个参数是字典的键,第二个参数是可选的,是传入键对应的值。如果不提供,默认为None。

dict1 = {}
a = dict1.fromkeys((1,2,3))   #不传入参数
print(a)   # {1: None, 2: None, 3: None}

dict2 = {}
b = dict2.fromkeys((1,2,3),'number')  #传入一个参数number
print(b)   # {1: 'number', 2: 'number', 3: 'number'}

dict3 = {}
c = dict3.fromkeys((1,2,3),('one','two','three'))  #传入一个元组
print(c)   # {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

注意:fromkeys() 把('one','two','three')  当成一个值

4.2、keys(),values()和items()
访问字典的方法有keys(),values()和items()

keys() 用于返回字典中的键,values()用于返回字典中所有的值,items() 用于返回字典中所有的键值对(也就是项)

dict1 = {}
dict1 = dict1.fromkeys(range(32),'赞')
print(dict1)
a =  dict1.keys()
print(a)   #dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, ......])

b = dict1.values()
print(b)   #ict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞'.......])

c =  dict1.items()
print(c)   #dict_items([(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), ......)


#通过key来取值
print(dict1[31])

print(dict1[32])   #键不存在会报错,KeyError: 32

4.3 get()

#使用get()取值
print(dict1.get(31))   #存在
print(dict1.get(32))   #不存在返回None,不会报错

#使用成员资格操作符(in 或者 not in) ,在字典中检查键的成员资格比序列更高效
#因为字典是采用哈希的方法一对一找到成员,而序列则是采取迭代的方式逐个比对
dict1 = dict.fromkeys(range(32),'赞')
print(dict1)
print(31 in dict1)    # True
print(32 in dict1)    #False

4.4 clear()
clear() 清空一个字典

dict1 = {}
dict1 = dict1.fromkeys(range(32),'赞')

dict1.clear()    #清空字典
print(dict1) 

4.5 copy()
copy()方法是复制字典

a = {1:'one',2:'two',3:'three'}
b = a.copy()
print(b)       # {1: 'one', 2: 'two', 3: 'three'}

print(id(b))   # 31935008
a[1] = 'four'
print(a)       # {1: 'four', 2: 'two', 3: 'three'}
print(b)       # {1: 'one', 2: 'two', 3: 'three'}

4.6、pop() 和popitem()
pop() 是给定键弹出对应的值,popitem()是弹出一个项

a = {1:'one',2:'two',3:'three',4:'four'}
print(a.pop(2))         #  two
print(a)                #  {1: 'one', 3: 'three', 4: 'four'}

print(a.popitem())      # (4, 'four')  默认弹出最后一个
print(a)                # {1: 'one', 3: 'three'}

4.7 setdefault()
setdefault() 方法和get()方法有点类似。setdefault()在字典中找不到相应的键时会自动添加

#找不到对应的键,会自动添加
a = {1:'one',2:'two',3:'three',4:'four'}
print(a.setdefault(3))     # three
print(a.setdefault(5))    # None
print(a)               # {1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: None}

#利用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)

4.8 update()
update() 方法是用于更新字典

pets = {'米老鼠':'老鼠','汤姆':'猫',"小白":'猪'}
pets.update( 小白 = "狗")
print(pets)

5、收集参数
使用两个(**),两个星号的收集参数表示为将参数们打包成字典的形式。

收集参数有两种打包方式:一种是以元组的形式打包;另一种则是以字典的形式打包

def test(** params):
    print("有%d个参数" % len(params))
    print("它们分别是:",params)

test(a =1,b= 2,c =3,d =4 ,e =5)
#当参数带两个星号(**)时,传递给函数的任意个key =value实参会被打包进一个字典中

"""
运行结果:
有5个参数
它们分别是: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
"""

a = {'one':1,'two':2,'three':3}
#解包
test(**a)

"""
运行结果:
有3个参数
它们分别是: {'one': 1, 'two': 2, 'three': 3}
"""

课后作业:
0、利用字典特性编写一个程序:


image.png

老师答案:


image.png image.png

我的答案:

mydict = dict()
while True:
    a = int(input("请输入代码:"))
    if a == 1:
        name = input("姓名:")
        print("%s:%s" % (name, mydict[name]))
    elif a == 2:
        name = input("姓名:")
        if name in mydict:
            print("已存在")
            print("%s:%s" % (name, mydict[name]))
            change = input("是否修改?")
            if change == "YES":
                tel = input("输入电话")
                mydict[name] = tel
        else:
            tel = input("输入电话")
            mydict[name] = tel
    elif a == 3:
        name = input("姓名:")
        mydict.pop(name)
    elif a == 4:
        print("感谢使用")
        break

上一篇下一篇

猜你喜欢

热点阅读