码迷,mamicode.com
首页 > 其他好文 > 详细

123132

时间:2019-06-10 13:19:28      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:child   loaded   键值   item   查询   返回值   有一个   有序   可以转化   

字典的初识:

虽然列表可以存储大量的数据,但数据之间的关联性不强

列表的查询速度比较慢。所以有了另一种容器型数据类型:dict。

可变的 无序的

数据类型的分类

不可变(可哈希 唯一的)的数据类型: str bool int tuple

可变(不可哈希)的数据类型:list dict set

字典:{}括起来,以键值对形式存储的容器型数据类型:

dic = {‘太白‘:{‘name‘: ‘太白金星‘,‘age‘: 18, }}

键必须是不可变的数据类型:int , str (bool tuple几乎不用) 唯一的。

可以是任意数据类型,对象**。

字典3.5x版本之前(包括3.5)是无序的随机显示

字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的。

字典3.7x以后都是有序的。

字典的优点:查询速度非常快,存储关联性的数据。

字典的缺点:以空间换时间。

哈希表

字典的创建方式:

  • # 面试会考
    # 方式一:
    # dic = dict((‘one‘, 1), (‘two‘, 2),)
    # print(dic) # {‘one‘: 1, ‘two‘: 2, }
    ?
    # 方式二:
    # dic = dict(one=1, two=2, )
    # print(dic)
    ?
    # 方式三:
    # dic = dict({‘one‘: 1, ‘two‘: 2,})
    # print(dic)

验证字典的合法性:

键要不可变的数据类型
键要唯一

fromkeys()

dic=dict.fromkeys(‘可迭代对象‘,值)
print(dic)#{‘迭代的最小元素‘: 值, ‘迭代的最小元素‘: 值}
# 坑:值共有一个,面试题
# dic = dict.fromkeys([1,2,3],[])#小心列表
# dic[1].append(666)
# print(dic)

 

字典的增删改查

dic = {‘name‘: ‘太白‘, ‘age‘: 18, ‘hobby_list‘: [‘直男‘, ‘钢管‘, ‘开车‘]}
?
?
直接增加 有则改之,无则增加   # 增:# 增:# 增:# 增:
dic[‘要改的值的建‘] = 要改的值
?
# dic.setdefault(‘增加的建名‘, 增加的值)#塞的第副的 有则不变,无则增加 定一不 先看看建存不存在 存在不添加
?
# update *** 啊普待的
# dic = {‘name‘: ‘太白‘, ‘age‘: 18}
# # dic.update(hobby=‘运动‘, hight=‘175‘)
# # dic.update(name=‘太白金星‘)
# dic.update([(1, ‘a‘),(2, ‘b‘),(3, ‘c‘),(4, ‘d‘)]) 更新 有则覆盖,无则增加
?

dic.pop(‘删除的建‘,‘防止报错‘) #按照键删除键值对 有返回值
设置第二个参数时候无论有没有建 都不会报错 返回的是删除的值或自定义的值
?
dic.clear() ## clear k额 清空字典中元素 **
l1={1:2}
del li将整个容器都删除 打印会报错
del dic[‘被删除的元素‘] # del **
?
dic = {‘k1‘: ‘太白‘, ‘k2‘: ‘barry‘, ‘k3‘: ‘白白‘, ‘age‘: 18}
# 将字典中键含有‘k‘元素的键值对删除。
# for key in dic:
#     if ‘k‘ in key:
#         dic.pop(key)
# print(dic) #报错
?
# 循环一个字典时,如果改变这个字典的大小,就会报错。
# l1 = []
# for key in dic:
#     if ‘k‘ in key:
#         l1.append(key)
# print(l1)
# for i in l1:
#     dic.pop(i)
# print(dic)
?
# for key in list(dic.keys()): # [‘k1‘, ‘k2‘, ‘k3‘,‘age‘]
#     if ‘k‘ in key:
#         dic.pop(key)
# print(dic)
?
?
dic[‘name‘] = ‘alex‘ # 改# 改# 改# 改# 改
?
# update *** 啊普待的
# dic = {‘name‘: ‘太白‘, ‘age‘: 18}
# dic.update(hobby=‘运动‘, hight=‘175‘)
# dic.update(name=‘太白金星‘)
#dic.update({‘5‘:5})
# dic.update([(1, ‘a‘),(2, ‘b‘),(3, ‘c‘),(4, ‘d‘)]) 字典更新 有则覆盖,无则增加 括号级别高
?
?
?
# print(dic=[‘查询的建‘])# 存在返回 建对应的值 字典中没此建会报错
有加减 用上面的
l1 = dic.get(‘查询的建名‘,‘返回值‘)设置第二个参数时候无论有没有建都不会报错 第2参数不传 有此建 返回对应的值 找不到默认返回None   返回的是第2参数本身
?
?
?
?
for 循环字典打印字典的建
?
# print(dic.keys(), 加s所有的建 放在一个特殊的数据类型(高仿列表不能用索引)当中 理解为列表
print(list(dic.keys()))# 可以转化成列表
for key in dic.keys(): 或者for i in dic
#     print(key)#   可以for 循环输出建
 
values()
print(dic.values())
print(list(dic.values()))##转为列表
for value in dic.values():
    print(value)   #循环输出值
?
items()哎特闷s
print(dic.items()) 列表形式 #循环输出所有的key和value# for
for key,value in dic.items():   元祖的拆包
    print(key,value) ###重要
a,b = (‘name‘, ‘太白‘)
print(a,b)
?
?

拆包

# a = 18   #拆包
# b = 12
# a,b = b,a#(可迭代对象)
# # a,b = 12,18
# print(a,b)

枚举

技术图片

相关练习题:

dic = {‘k1‘: "v1", "k2": "v2", "k3": [11,22,33]}
# 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
# 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
# 请在k3对应的值中追加一个元素 44,输出修改后的字典
# print(dic[‘k3‘])
# l1 = dic.get(‘k3‘)
# print(l1)
# dic.get(‘k3‘).append(44)
# print(dic)
# 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典

字典的嵌套

dic = {
   ‘name‘: ‘汪峰‘,
   ‘age‘: 48,
   ‘wife‘: [{‘name‘: ‘国际章‘, ‘age‘: 38},],
   ‘children‘: {‘girl_first‘: ‘小苹果‘,‘girl_second‘: ‘小怡‘,‘girl_three‘: ‘顶顶‘}
}
?
# 1. 获取汪峰的名字。
#
# 2.获取这个字典:{‘name‘:‘国际章‘,‘age‘:38}。
#
# 3. 获取汪峰妻子的名字。
?
# 4. 获取汪峰的第三个孩子名字。

技术图片

  • 字典:查询速度快,数据的关联性强。

    • 键不可变得数据类型,(str int),唯一。

    • 值:任意数据类型,对象。

    • 增删改查(全部都要会默写)***

    • 字典的嵌套。***

    •  

123132

标签:child   loaded   键值   item   查询   返回值   有一个   有序   可以转化   

原文地址:https://www.cnblogs.com/saoqiang/p/10996970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!