# 字典

字典类似于 Java 中 Map

字典与列表类似,也是可变序列,不同的是字典是无序的可变序列,保存的内容以“键-值”对的形式存放。键是唯一的,只可以有对个

特点:

  • 通过键而不是索引来获取值 字典有时候也称为关联数组或者散列表(hash)。通过“键-值”的方式进行关联,所以直接使用键而非索引获取值。
  • 字典是任意对象的无序集合 字典是无序的,字典中的项保存的顺序也是无序的,这样有利于提高查找效率。
  • 字典是可变的,且可以任意嵌套
  • 字典的键必须唯一
  • 字典中的键必须不可修改。 字典中的键不可变,可以使用数字、字符串或者元组,但是不能使用列表

# 1、创建字典

# 直接创建

## 格式
## dict = {'key1':'value1','key2':'value2',.....}
## * key1---keyn:键,必须为唯一不可变
## * value1-valuen:值,可以是任意数据类型

## 创建通讯录
dictinary = {"zs":"123","lisi":"456","wangwu":"789"}
print(dictinary)

# 空字典

dictinary = {}
or
dictinary = dict()

# dict() 创建字典

  • 通过映射函数创建字典

    ## 格式
    ## dict = dict(zip(list1,list2))
    ## * dict :字典名称
    ## * zip() 函数:用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的 zip对象。
    
    name = ['张三','李四','王五']
    sign = ['狮子座','水瓶座','处女座']
    dictinary = dict(zip(name,sign))
    print(dictinary)
    ## 结果
    {'张三': '狮子座', '李四': '水瓶座', '王五': '处女座'}
    
    
  • 通过给定的键值对创建字典

    ## 格式
    ## dictinary = dict(key1=value1,key2=value2,key3=value3)
    
    dictinary = dict(张三='狮子座',李四="水瓶座",王五="处女座")
    print(dictinary)
    ## 结果
    {'张三': '狮子座', '李四': '水瓶座', '王五': '处女座'}
    
  • 根据 列表中的元素作为key创建空value字典

    ## 格式
    ## dictinary = dict.fromkeys(list)
    ## * dictinary 字典名称
    ## * dict.fromkeys 创建值为空的字典
    ## * list 作为字典键的列表
    
    name_list = ['张三','李四','王五']
    dictinary = dict.fromkeys(name_list)
    print(dictinary)
    ## 结果
    {'张三': None, '李四': None, '王五': None}
    

    # 元素删除

    # 直接删除
    del(dictinary)
    # 不删除,清空元素
    dictinary.clear()
    # 删除指定元素,并返回 value值
    value = dictinary.pop(keyname)
    # 随机删除一个元素,并返回 value
    value = dictinary.popitem()
    

# 2、字典删除

del dictinary # 删除这个字典
dictinar.clear() # 不删除字典,清空字典元素

# 3、字典访问

# 通过键值对访问

## 格式
## dictinary[key] 直接通过 key 访问,如果 不存在会报错
##
## dictinary.get(key[,default])
## * key 指定的 键
## * default 不存在key 时使用该默认值

dictinary = dict(张三='狮子座',李四="水瓶座",王五="处女座")
print(dictinary)
print(dictinary['张三']) # 直接通过 key 获取,如果不存在则报错
print(dictinary["张思"] if '张思' in dictinary else '字典中不存在此人') # 通过 if else 过滤不存在的值
print(dictinary.get('李四')) # 通过get 的方式获取
print(dictinary.get('李五','默认值')) # 通过 get 方式获取,如果没有值,使用自己指定的默认值

# 4、遍历字典

## 格式
## 遍历键值
## dictinary.items()
###################
## 遍历键,遍历key
## dictinary.values()    dictinary.keys()

dictinary = dict(张三='狮子座',李四="水瓶座",王五="处女座")
for key,value in dictinary.items():
    print(key,"星座是:",value)
## 遍历 value
for value in dictinary.values():
    print(value)

## 遍历 key
for key in dictinary.keys():
    print(key)

# 5、元素的增删改

# 修改,添加

## 格式
## dictinary[key] = value
## * key 如果存在则是修改,如果不存在则是新增

dictinary = dict(张三='狮子座',李四="水瓶座",王五="处女座")
dictinary['张三'] = '修改的狮子座'
dictinary['知行'] = '没有星座'
print(dictinary)

## 结果
{'张三': '修改的狮子座', '李四': '水瓶座', '王五': '处女座', '知行': '没有星座'}

# 删除

## 格式
## del dictinary[key] 如果不存在会报错
dictinary = dict(张三='狮子座',李四="水瓶座",王五="处女座")
if '张三' in dictinary:
    del dictinary['张三']
print(dictinary)
## 结果
{'李四': '水瓶座', '王五': '处女座'}

# 6、字典推导式

# 随机数

import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print(randomdict)

# 使用列表

name = ['张三','李四','王五'] # key
sign = ['射手','狮子','处女'] # value
dictinary = {i:j+"座" for i,j in zip(name,sign)}
print(dictinary)

## 结果
{'张三': '射手座', '李四': '狮子座', '王五': '处女座'}
最近更新时间: 7/12/2020, 9:23:38 PM