字典的常用操作及练习

dic1 = {'name':'whw','age':22,'sex':'male'}
dic2 = {'name':'whw'}
##注意,字典时无序的,没有要求字典排序
'''
特别注意:字典没有remove方法!!只有列表有remove方法!
'''
#创建一个字典——dict.fromkeys()
dic3 = dict.fromkeys(['name1','name2','name3'],'whw1')
print(dic3)#{'name1': 'whw1', 'name2': 'whw1', 'name3': 'whw1'}

#
#setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖
dic1.setdefault('k','v')
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v'}
dic1.setdefault('k','v1')
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v'}
##添加键值对
dic1['n'] = 'm'
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v', 'n': 'm'}

#
'''
del dic2
print(dic2)#会报错——NameError: name 'dic2' is not defined
'''
# 清空字典
print('dic1:',dic1)#dic1: {'name': 'whw', 'age': 22, 'sex': 'male', 'k': 'v', 'n': 'm'}
dic2.clear()
print(dic2) # {}
#pop方法——pop(key,'无key返回的值')————返回删除的“值”
print(dic1.pop('k')) #v
print(dic1.pop('w','没有这个键')) #没有这个键
#popitem()方法————
'''
# 3.5之前随机删除字典中的某个键值对,并将删除的键值对以元组的形式返回
# 3.6之后删除的是最后的键值对
'''
print(dic1.popitem())#('n', 'm')
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male'}

#
#update方法——字典的扩展
dic3 = {'a1':'b'}
dic1.update(dic3)
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'a1': 'b'}
#找到对应的键直接改
dic3['a1'] = 123
print(dic3)#{'a1': 123}

###查
print(dic1)#{'name': 'whw', 'age': 22, 'sex': 'male', 'a1': 'b'}
print(dic1.get('name'))#whw
print(dic1.get('whw','没有这个key'))#没有这个key
#查出所有的key
d1 = dic1.keys()
print(d1)#dict_keys(['name', 'age', 'sex', 'a1'])
print(type(d1))#<class 'dict_keys'>
print(list(d1))#['name', 'age', 'sex', 'a1']
#查出所有的键值对
d2 = dic1.items()
print(d2)#dict_items([('name', 'whw'), ('age', 22), ('sex', 'male'), ('a1', 'b')])
#查出所有的值
d3 = dic1.values()
print(d3)#dict_values(['whw', 22, 'male', 'b'])

##字典的遍历
#i是序号,默认是0
#v是字典的键
for i,v in enumerate(dic1,1):
    print(i,v,dic1[v])
#或者可以这样:但是没有数字了
for k,v in dic1.items():
    print(k,v)

##练习
###一行操作改变dic11字典:
dic11 = {'k1':'v111','a1':'b'}
dic111 = {'k1':'v1','k2':'v2','k3':'v3'}
dic11.update(dic111)
print(dic11)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'}
print(dic11.update(dic111))#None

 练习

###python3.5(包括3.5之前)字典是无序的
###python3.6之后字典是有序的

###字典的优点:
            #字典可存储大量的关系数据
            #字典的查询的速度特别快

#注意,如果字典的两个键一样了,取后面的
# dicc = {
#     'name':'Alex',
#     'name':'wanghw',
#     'age':22
# }
# print(dicc)#{'name': 'wanghw', 'age': 22}

dic1 = {'name':'wanghw','age':22,'sex':'male'}
dic2 = {'name':'whw'}

#——字典是无序的,没有要求字典排序
dic3 = dict.fromkeys(['name1','name2','name3'],'whw')
print(dic3)
#####################
#
##添加键值对
dic2['age'] = 18
print(dic2)
##setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖
dic2.setdefault('k','v')
print(dic2)#{'name': 'whw', 'age': 18, 'k': 'v'}
# 如果原字典中存在设置的键值对,则他不会更改或者覆盖
dic2.setdefault('k',123)
print(dic2)#{'name': 'whw', 'age': 18, 'k': 'v'}

#######################
#
##del

##clear

##pop——pop(key,'无key返回的值')————返回删除的“值”
print(dic2.pop('k'))
print(dic2.pop('w','没有这个键'))

##popitem——随机删除字典中的某个键值对,并将删除的键值对以元组的形式返回
print(dic3.popitem())
print(dic3)

#######################
#
##扩展——update————存在的键值对“覆盖”、不存在的键值对添加到最后
dic3 = {'a1':'b'}
dic1.update(dic3)
print(dic1)
'''
注意如果update的字典有共同的键,则"更新"了:
dict1 = {'k1':'v111','a1':'b'}
dict2 = {'k1':'v1','k2':'v2','k3':'v3'}
dict1.update(dict2)
print(dict1)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'}
'''
##找到对应的值直接改
dic1['a1'] = 'A'
print(dic1)

######################
#
##直接指定键——不好,没有回报错
print(dic1['name'])
# print(dic1['name1'])#没有的话会报错
##get方法
print(dic1.get('name'))
print(dic1.get('name1','没有这个键'))#没有的话不会报错,默认返回None

##查出所有的key
print(dic1.keys())
print(type(dic1.keys()))#<class 'dict_keys'>
###可以转化成列表
print(list(dic1.keys()))#['name', 'age', 'sex', 'a1']

##查出所有键值对——元组形式返回
print(dic1.items())#dict_items([('name', 'wanghw'), ('age', 22), ('sex', 'male'), ('a1', 'A')])

##查出所有值
print(dic1.values())#dict_values(['wanghw', 22, 'male', 'A'])

######################
##字典的遍历——enumerate:i默认从0开始,v是字典的键
for i,v in enumerate(dic1):
    print(i,v,dic1[v])
'''
0 name wanghw
socketserver模块-循环接收0 age 22
2 sex male
3 a1 A
'''
#或者可以这样:
for i,v in enumerate(dic1.items()):
    print(i,v)
'''
0 ('name', 'wanghw')
socketserver模块-循环接收0 ('age', 22)
2 ('sex', 'male')
3 ('a1', 'A')
'''
#还可以这样:
for k,v in dic1.items():
    print(k,v)
'''
name wanghw
age 22
sex male
a1 A
'''

###练习
###一行操作改变dic11字典:
dict1 = {'k1':'v111','a1':'b'}
dict2 = {'k1':'v1','k2':'v2','k3':'v3'}
dict1.update(dict2)
print(dict1)#{'k1': 'v1', 'a1': 'b', 'k2': 'v2', 'k3': 'v3'}
# dict2.update(dict1)
# print(dict2)

 

posted on 2019-05-20 22:02  江湖乄夜雨  阅读(226)  评论(0编辑  收藏  举报