字典{}

雨燕双飞 提交于 2019-12-01 16:48:21

1. 什么是字典
dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据
{"jj":"林俊杰", "jay":"周杰伦"}

查询的效率非常高, 通过key来查找元素
内部使用key来计算一个内存地址(暂时),hash算法. key必须是不可变的数据类型(key 必须是可哈希的数据类型)
键值对数据 {key:value} 唯一性

键 都必须是可哈希的 不可变的数据类型就可以当做字典中的键

值 没有任何限制

2. 字典的增删改查
1. 字典的新增:

dic[key] = valuedic.setdefault(key,value)   如果键在字典中存在不进行任何操作,否则就添加                            可以通过key查询,没有这个key返回None
# dic = {}
# # 徐峥:人在囧途
# dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可
# dic['黄渤'] = "疯狂的石头"
# dic["王宝强"] = "天下无贼"
# dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改
#
# dic.setdefault("黄秋生")
# dic.setdefault("黄秋生", "无间道")    # 如果存在了key, 不会执行新增
#
# print(dic)

  


2. 删除
pop(key)
popitem()
clear()
del dict[key]

dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
# dic.pop("吕颂贤") # 指定key删除
# dic.popitem()  # 随机删除
# del dic["黄日华"]  # 删除
# dic.clear() # 清空字典

print(dic)

  


3. 修改
dic[key] = 新值
update()
4. 查询
1. 用key直接查询 dict[key]
2. get(key, 如果key不存在返回的数据)
3. setdefault() 1. 执行新增流程. 2. 查询结果
5. 操作

keys     获取到所有的键存在一个高仿的列表中values   获取到所有的值存在一个高仿的列表中items    获取到所有的键值对已元祖的形式存在一个高仿的列表中

解构, 直接把元组或者列表中的数据拿出来.
a, b, c = (a1, b1, c1) 必须一一对应

dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
# dic['王木生'] = "刘伟"
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
dic.update(dic2)
print(dic)

# 查询
dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
# 1. 最直观。 直接用key
print(dic['周杰伦'])  # 当这个key不存在的时候会报错
# 2. get方法
print(dic.get("谢大脚", "周杰伦不在这里"))  # 没有key. 返回None
# 3. setdefault()  1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
dic = {}
dic["盖伦"] = "德玛西亚之力"
value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
value3 = dic.setdefault("薇恩", "坑")

print(value3)
print(dic)

  

6. 遍历字典
for key in dict:
dict[key]

for k, v in dict.items():
k , v

dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}

# 对字典的遍历
# print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
# for key in dic.keys():
#     print(key)  # 拿到key
#     print(dic[key]) # 拿到value

# print(dic.values())
# for value in dic.values():
#     print(value)


# 也可以遍历字典
# [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
# print(dic.items())  # 拿到的是key和value
for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
    print(k) # 元组
    print(v)


# 字典本身是一个可迭代对象,可以直接进行for循环
for el in dic:  # 直接拿到key
    print(el)
    print(dic[el])

# 前面的变量的个数和后面解包的个数一致
# a, b = (10, 20) # 解构, 解包
# print(a)
# print(b)

  

7. 字典嵌套.

wf = {
    "name": "汪峰",
    "age": 48,
    "成名曲": "春天里",
    "wife": {
        "name": "章子怡",
        "age": 39,
        "工作": "演员"
    },
    "children":[
        {"num": "001", "name": "汪一", "hobby": "唱歌"},
        {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
    ]
}

# wf['wife']['age'] = wf['wife']['age'] + 10
# print(wf)

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!