字典

所有的编程语言都有字典这种数据类型,用法都一样.Python和Golang中叫字典,其他语言中有的叫哈希,映射,map等等,都是一个概念.
描述一个物体相关信息,一对(key,value的形式)
数据类型不一样,意思也不一样,不同类型,但是这些数据联合在一起都表示同一个物体的信息.
值可以是任何数据类型,键只能使用字符串.数字或元组,通常键只用字符串表示(为了和其他语言保持一致)
键必须是唯一的
没有真正的索引,所以是无序的,打印输出会出现顺序不一致的情况.

作用:描述一个物体的信息,类型可以不同
格式:{key1:value1,key2:value2...}
字典[key]
key唯一

dict1 = {"name": "zhangshan", "age": 18, "boy": True, "name": "456"}  # 如果key重复了,value会取最后的那个key对应的value
# 字典的元素总数等于 ,号的个数 + 1
print(dict1["name"])  # 获取指定key对应的value
print(type(dict1))
print(dict1)
dict1["name"] = "op"  # 修改指定key对应的value
print(dict1)
dict1["height"] = 1.75  # 如果key存在就是修改,key不存在就是增加键值对
print(dict1)

1.增加元素:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
dict1["height"] = 1.7  # key不存在就是增加,存在就是修改

2.删除元素:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
del dict1["gender"]  # 删除指定key对应的键值对,无返回值
name = dict1.pop("name")  # 删除指定key对应的键值对,并且把删除的value返回,pop()本来是删除最后一个,但是因为字典是无序的,所以必须指定key,否则会报错

3.清空元素:

dict1 = {"name": "zhang", "age": 15, 'gender': 'male'}
dict1.clear()  # 清空

4.修改元素:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
dict1["name"] = "74"  # 修改key对应的value

dict1.setdefault("name1", "lisi")  # 如果key存在,什么也不做,key不存在就增加键值对

dict2 = {'height': 175, "boy": True, "name": "liskk"}
# key存在就是修改(因为key如果存在的话新添加的key对应的value会覆盖掉原来的value),不存在就增加键值对
dict1.update(dict2)

5.查询元素:

# 查询的方法均有返回值
dict1 = {"name": "zhang", "age": 15,'gender':'male'}
name = dict1["name"]  # 获取指定key的value,如果获取的key不存在,报错
name = dict1.get("name1")  # 获取指定key的value,如果获取的key不存在,不会报错,返回None

6.获取所有key:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
keys = dict1.keys()  # 获取字典中所有的键
for key in keys:
    print(key)
print(keys)  # 输出的是:dict_keys(['name', 'age'])

7.获取所有的value:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
values = dict1.values()  # 获取出字典中所有的值,返回的也是视图对象
for value in values:
    print(value)
print(values)

8.获取key-value键值对:

dict1 = {"name": "zhang", "age": 15,'gender':'male'}
items = dict1.items()  # 获取出所有的键值对,视图对象,里面是一个元组类型,且元组的个数是固定的,所以可以使用解包
print(items)
for item in items:
    print(item)

for key,value in dict1.items():  # 解包
    print(key)
    print(value)

for ele in dict1:  # 遍历字典默认取到的是key,这种最好用,最常用
    print(dict1[ele])  # 通过key来取到value
import sys
it = dict1.keys()  # 获取所有key
print(sys.getsizeof(it))  # 占用少,叫视图对象

it1 = list(it)
print(sys.getsizeof(it1))  # 占用的内存字节多

values = dict1.values()  # 所有值
print(values)  # dict_values(['zang', 15])

items = dict1.items()  # 所有key-value键值对
print(items)  # dict_items([('name', 'zang'), ('age', 15)])
print(type(items))  # <class 'dict_items'>
for key, value in dict1.items():
    print(key)
    print(value)
for ele in dict1:  # 遍历默认是key
    print(dict1)
    print(dict1[ele])

9.视图对象:

视图对象/可视对象:dict_keys(['name', 'age']),减少内存的占用.

支持的操作:

  1.查看内部结构

  2.支持for循环遍历

  3.支持if in语句

  4.没有增.删.改(类似元组)

  5.可以把它转换成高级变量类型

Python2中 字典.keys(),字典.values()和 字典.items() 获取到的都是列表类型,Python3修改成了视图对象(也是可迭代对象),目的是为了减少内存的占用.数据类型变了,更加省内存空间了.(版本升级肯定是越来越好,不能变差了)

原文地址:https://www.cnblogs.com/huaibin/p/12095658.html