python全栈_011_Python3基本数据类型--字典

Posted ixuby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全栈_011_Python3基本数据类型--字典相关的知识,希望对你有一定的参考价值。

1:什么是字典?:

  dict,以{} 来表示,使用逗号来隔开,内部元素使用key:value的形式来保存数据,key必须是不可变的数据类型,value可以是任何类型的数据类型。
  已知不可变的数据类型:int,str,bool,tuple
  可变的数据类型: list,dict,set
  语法:
    {key1:value1,key2:value2,key3:value1.......}
    (注意:key必须是不可变数据类型)

# 合法
dic = {1234: 789, jj: 林俊杰, True: 300, jay: 周杰伦, (1,2,3): hello}  # 这样是可以的
print(dic[1234])
print(dic[jj])
print(dic[True])
print(dic[(1,2,3)])

# 不合法的
# dic = {1234: 456,[1,2]: ‘list‘}  # list 是可变的,不能作为key;TypeError: unhashable type: ‘list‘
#dic = {1234: 456,{1:2}: ‘dict‘}   # dict 是可变的,不能作为key;TypeError: unhashable type: ‘dict‘
dic = {1234: 456,{1,2}: set}     # set 是可变的,不能作为key;TypeError: unhashable type: ‘set‘

2:字典的增删改查:

2.1:增加

dic = {}  # 或者 dic = dict()
# 1: 直接用key 往里面存数据即可,
#    如果不存在key值就添加,如果存在就更新key对应的值;
dic[刘德华] = 马桶  #  直接用key 往里面存数据即可
dic[王宝强] = 天下无贼
print(dic)   #  输出  {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘天下无贼‘}
dic[王宝强] = 士兵突击  # 如果key值存在,那么会替换掉原来的value
print(dic)    # 输出  {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘}

# 2:setdefault(),如果不存在就添加,返回value值;如存在就不做增加处理,返回原来的value值
value = dic.setdefault(黄秋生, 头文字D)
print(value)  # 头文字D
print(dic)    # {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘, ‘黄秋生‘: ‘头文字D‘}
value = dic.setdefault(黄秋生, 无间道)  # 如果存在了key,不会执行增加操作,
print(value)  # 头文字D
print(dic)    # {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘, ‘黄秋生‘: ‘头文字D‘}

2.2:删除

# 1: pop,指定 key值删除
# dic.pop("a",‘无key默认返回值‘) # pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值
dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
value = dic.pop(王宝强)  # key存在,并返回key对应的value
print(value)  # 天下无贼
print(dic)   # {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘}

dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
# dic.pop(‘刘德华‘)  # key值不存在,这样删除会报错, KeyError: ‘刘德华‘
# 删除时指定默认的返回值
value = dic.pop(刘德华,None) #  这样删除不会报错
print(value)  # None
print(dic)    # {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘, ‘王宝强‘: ‘天下无贼‘}

# 2: popitem()  随机删除
dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
dic.popitem()      # 随机删除
print(dic)

#  3: del,key值需要存在,不然会报错
dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
del dic[苏有朋]    # 删除存在的key值,
print(dic)
#del dic[‘苏有朋‘]    #  删除不存在的key,报错, KeyError: ‘苏有朋‘
#print(dic)

# 4:clear() 清空字典
dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
dic.clear()   # 清空字典
print(dic)

2.3:修改

# 更新(修改):
dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "刘德华": "马桶", "王宝强": "天下无贼" }
dic[刘德华] = 无间道 # key不存在就添加,key存在就更新
dic2 = {刘能: 大阳哥, 王宝强: 士兵突击}
dic.update(dic2)  # 将dic2所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic中
print(dic)
print(dic2)

2.4:查询(访问)

# 查询
dic = {黄日华: 天龙八部, 苏有朋: 倚天屠龙记, 刘德华: 无间道, 王宝强: 士兵突击, 刘能: 大阳哥}
#1:最直观。直接用key
print(dic[苏有朋])   # 没有key值会报错
#print(dic[‘苏有朋3‘])  # KeyError: ‘苏有朋3‘

#2:get方法,不存在返回None
print(dic.get(黄日华))
print(dic.get(黄日华2))  # 不存在返回 None
print(dic.get(黄日华3, haha不存在))  # 第二个参数,不存在的时候,默认的返回值

2.5:判断某个key是否存在

dic = {黄日华: 天龙八部, 苏有朋: 倚天屠龙记, 刘德华: 无间道, 王宝强: 士兵突击, 刘能: 大阳哥}

# 1:使用get方法
if dic.get(黄日华1) == None:
    print(黄日华1 不存在)
else:
    print(黄日华1 存在)

# 2:
if 黄日华2 in dic:
    print(黄日华2 存在)
else:
    print(黄日华2 不存在)

if  黄日华3 in dic.keys():
    print(黄日华3 存在)
else:
    print(黄日华3 不存在)

3:字典的相关(遍历):

dic = {黄日华: 天龙八部, 苏有朋: 倚天屠龙记}

# 对字典的遍历
print(-1-keys: + -*30)
print(dic.keys())  # dict_keys([‘黄日华‘, ‘苏有朋‘])  像列表,但不是列表
# 遍历key,并通过key访问value
for key in dic.keys():
    print(key, dic[key])

print(-2-values: + -*30)
print(dic.values())
# 遍历value
for value in dic.values():
    print(value)

print(-3-items: + -*30)
# 也可以遍历字典
print(dic.items())  # 拿到的是 (key,value)元组
for item in dic.items():
    print(item,type(item))   # item 为元组
    print(item[0], item[1])  # 通过下标访问元组 item[0] 为key值,item[1]为value值


# 解构,解包
a, b = (10, 20)  # 解构,解包,要求前面变量的个数,与后面解包的个数一致
print(a,b)
a, b = [30, 40]  # 解构,解包 ,这样也是可以的
print(a,b)

for item in dic.items():
    k, v = item # item 是元组,进行解包
    print(k, v)

# 可以直接使用下面的方式:
for key, value in dic.items():  # 当需要遍历字典,在操作中涉及到key和value的时候
    print(key, value)


#  字典本身是一个可迭代对象,可以直接进行for循环
dic = {黄日华: 天龙八部, 苏有朋: 倚天屠龙记}
# 只需要遍历key的时候,使用这种方式
for key in dic:  # 拿到的是Key,  dic.keys()的结果一样
    print(key)

 

4:字典的嵌套:

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

}

print(wf)
# wf 第二个孩子的爱好 ?
print(wf[children][1][hobby])  #  输出 演戏
# wf 妻子的工作 ?
print(wf[wife][工作])  # 输出 演员
# wf 的老婆 老了10岁 ?
wf[wife][age] = wf[wife][age] + 10
print(wf)

 

5:字典内置函数&方法:

  Python字典包含了以下内置函数:

序号函数及描述
1 cmp(dict1, dict2)
比较两个字典元素。
2 len(dict)
计算字典元素个数,即键的总数。
3 str(dict)
输出字典可打印的字符串表示。
4 type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

  Python字典包含了以下内置方法:

序号函数及描述
1 dict.clear()
删除字典内所有元素
2 dict.copy()
返回一个字典的浅复制
3 dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4 dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5 dict.has_key(key)
如果键在字典dict里返回true,否则返回false
6 dict.items()
以列表返回可遍历的(键, 值) 元组数组
7 dict.keys()
以列表返回一个字典所有的键
8 dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 dict.update(dict2)
把字典dict2的键/值对更新到dict里
10 dict.values()
以列表返回字典中的所有值
11 pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem()
随机返回并删除字典中的一对键和值。

 

6:for循环:

  for循环:用户按照顺序循环可迭代对象的内容。

s = HelloWorld
print(s)
for i in s:
    print(i,end=,)

print(‘‘)
lst = [1,3,4,hi]
for el in lst:
    print(el,end= ,)

print(‘‘)
tu = (1,4,中国,False)
for el in tu:
    print(el,end=,)

print(‘‘)
dic = {黄日华: 天龙八部, 苏有朋: 倚天屠龙记}
for k,v in dic.items():
    print(k,v)

6:enumerate:枚举:

  enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
# enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),
# enumerate将其组成一个索引序列,利用它可以同时获得索引和值
# enumerate(sequence, [start=0])

s = HelloWorld
print(s)
for index,value in enumerate(s):
    print(index,value)

print(‘‘)
lst = [1,3,4,hi]
for index,el in enumerate(lst):
    print(index,el)

print(‘‘)
tu = (1,4,中国,False)
for index,el in enumerate(tu):
    print(index,el)

 


































以上是关于python全栈_011_Python3基本数据类型--字典的主要内容,如果未能解决你的问题,请参考以下文章

python全栈_009_Python3基本数据类型--列表

Python3.6全栈开发实例[011]

python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法

python全栈开发基础补充metaclass(元类)

Python全栈开发——描述符

Python全栈__字典及其操作