第三天 第四章 字典

字典与列表类似,也是可变序列,但它是无序的可变序列,保存的内容以“键值对”的形式存放。一个键(key)对应一个值(value)。键是唯一的,而值可以有多个,也可以重复。

  特点:

1、通过键来读取值:字典也称为关联数组或散列表(hash)。

2、字典是任意对象的无序集合:这样可以提高查找效率。

3、字典是可变的,可以在原处增长或缩短(无须生成一个副本),并且可以任意嵌套。

4、字典中的键必须是唯一:如果出现两个相同的键,只记忆最后一个值。

5、字典中的键不可变,可以使用数字、字符串、元组,但不能使用列表。

# 创建字典时,键和值之间用冒号分隔,相邻的两个元素用逗号分隔,所有元素放在大括号中。
# dictionary = {'key 1':'value 1', 'key 2':'value 2', 'key 3':'value 3',...,'key n':'value n', }

# 创建一个字典,保存QQ号
dictPhone = {'zack':'25890526', 'QQ':'25890526', '腾讯':'10000'}
print(dictPhone)

# 创建空字典,有两种方法
dictEmpty1 = {}
dictEmpty2 = dict()
print(dictEmpty1,dictEmpty2)

# 通过映射函数创建字典 : dictionary = dict(zip(list1,list2))
# list1生成字典的键,list2生成字典的值。如果列表长度不同,以短的列表为标准。

list1 = ['1','2','3']
list2 = ['one','two','three']
tuple1 = ('1','2','3')
tuple2 = ('one','two','three')
# print(zip(list1,list2))
for i in zip(list1,list1):
    print(i,end='   ')
    # ('1', 'one')   ('2', 'two')   ('3', 'three') 

print()
# dictlist = list(zip(list1,list2))
dictlist = dict(zip(list1,list2))
print(dictlist)
dicttuple = dict(zip(tuple1,tuple2))
print(dicttuple)
dictall = dict(zip(list1,tuple2))
print(dictall)

# zip()函数,用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。
# 获取字典则用dict(),获取列表则用list(),获取元组则用tuple()。



# 通过给定关键字参数创建字典:dictionary=dict(key1=value1,key2=value2,...,keyn=valuen)
dictqq=dict(qq=25890526,zack='25890526',腾讯='10000')
print(dictqq)

# 使用dict对象的fromkeys()创建值为空的字典:dictionary=dict.fromkeys(list)
listk=['qq',4,'hello']
dictk=dict.fromkeys(listk)
print(dictk)

# 用一个元组和一个列表创建字典
tupleb=('qq','zack','腾讯')
listb=[25890526,25890526,'10000']
dictb={tupleb:listb}
print(dictb)

# 不需要的字典可以用del删除:del dictionary

# 删除字典的全部元素:dictionary.clear()

# pop()方法删除并返回指定键的元素
print(dictall)
print(dictall.pop('1'))

# popitem()方法删除并返回最后一个元素。
print(dictall)
print(dictall.popitem())


# 通过键下标访问
dictd={'apple':25.5,'bnana':31.2,'orange':16}
print(dictd['bnana'])
# 为了避免异常,将上述代码改为如下:
print(dictd['bnana'] if 'bnanaxxx' in dictd else '没有此项')
# 另一个避免异常的方法
print(dictd.get('bnana','没有此项'))

# 遍历字典:dictionary.items()
dictc = {'zack':'25890526', 'QQ':'25890526', '腾讯':'10000'}
dictTemp = dictc.items()
print(dictTemp)
# dict_items([('zack', '25890526'), ('QQ', '25890526'), ('腾讯', '10000')])

# 只用一个参数获取的是字典的元素
for i in dictTemp:
    print(i)

# 用两个参数获取的是键和值
for i,j in dictTemp:
    print(i,j)

# 获取每个元素的键
for i in dictc.keys():
    print(i)

# 获取每个元素的值
for i in dictc.values():
    print(i)

# 添加
dictd = {'zack':'25890526', 'QQ':'25890526', '腾讯':'10000'}
dictd['zoe'] = '147258369' 
print(dictd)

dictd['QQ'] = 987654321 # 如果键是已经存在,相当于修改
print(dictd)

del dictd['zack'] # 删除一个元素,如果删除不存在的元素将抛出一个异常
print(dictd)

if 'zoe' in dictd:
    del dictd['zoe']
    print(dictd)
else:
    print('没有')


# 字典推导式
import random
dicte = {i:random.randint(10,100) for i in range(1,10)}
print(dicte)

name = ['绮梦','冷伊一','香凝','黛兰']        # 作为键的列表
sign = ['水瓶座','射手座','双鱼座','双子座']  # 作为值的列表
dicte = {i:j for i,j in zip(name,sign)}
print(dicte)

 

posted @ 2020-08-15 15:07  Zack6688  阅读(204)  评论(0)    收藏  举报