# -*- coding: utf-8 -*-
# @Time : 2019/11/7 14:23
# @Author : John
# @Email : 2398344557@qq.com
# @File : 字典.py
# @Software: PyCharm
import string
- 字典包含若干鍵值對的無序可變的序列
- 字典中的鍵可以為任意的不可變的數(shù)據(jù),比如number、string怠晴、tuple
# 空字典
# 創(chuàng)法一:
d1 = {}
print(d1)
# —— {}
print(type(d1))
# —— <class 'dict'>
# ------------
# 創(chuàng)法二:
d2 = dict()
print(d2)
# —— {}
print(type(d2))
# —— <class 'dict'>
# --------------------------
# # ***拓展***
# 空列表
l = []
print(type(l))
# # —— <class 'list'>
# ------------
# 空元組
t = ()
print(type(t))
# # —— <class 'tuple'>
d = {'server': 'db.neuedu.com', 'database': 'oracle'}
print(type(d))
# —— <class 'dict'>
print(d)
# —— {'server': 'db.neuedu.com', 'database': 'oracle'}
- 使用dict函數(shù)將已有數(shù)據(jù)轉化為字典
# 1. 使用ip()對兩個列表進行重組
keys = [x for x in string.ascii_lowercase[:5]]
print(keys)
# —— ['a', 'b', 'c', 'd', 'e']
values = [i for i in range(1, 6)]
print(values)
# —— [1, 2, 3, 4, 5]
print(dict(zip(keys, values)))
# —— {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
# 2. 使用dict(),根據(jù)給定的鍵值創(chuàng)建
d3 = dict(name='xuebi', age=20, gender='female')
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female'}
# 3. 根據(jù)給定的內容為鍵可很,創(chuàng)建值為空的字典
# dict.fromkeys(seq) # seq為可迭代對象
print(dict.fromkeys(['name', 'age', 'gender']))
# —— {'name': None, 'age': None, 'gender': None}
# 以鍵為下標讀取字典,不存在鍵時拋出異常
# 格式:字典名['鍵']
d3 = dict(name='xuebi', age=20, gender='female')
print(d3['name'])
# —— xuebi
# print(d3['addr']) # 不存在addr鍵凰浮,因此拋出異常
# —— KeyError: 'addr'
# ***拓展***
# 解決方法我抠;使用字典的get方法獲取指定鍵對應的值苇本,并且可以為不存在的鍵指定默認返回值
print(d3.get('name'))
# —— xuebi
# print(d3.get('addr'))
# —— None
print(d3.get('addr', '廣東鶴山'))
# —— 廣東鶴山
d3 = dict(name='xuebi', age=20, gender='female')
print(d3.keys())
# —— dict_keys(['name', 'age', 'gender'])
print(list(d3.keys())) # 返回列表
# —— ['name', 'age', 'gender']
- 獲取字典所有的值菜拓,返回包含這個字典所有值的列表
d3 = dict(name='xuebi', age=20, gender='female')
print(d3.values())
# —— dict_values(['xuebi', 20, 'female'])
print(list(d3.values())) # 返回列表
# —— ['xuebi', 20, 'female']
- 獲取字典所有的鍵值瓣窄,返回包含這個字典所有鍵值的列表
d3 = dict(name='xuebi', age=20, gender='female')
print(d3.items())
# —— dict_items([('name', 'xuebi'), ('age', 20), ('gender', 'female')])
print(list(d3.items())) # 返回列表+元組
# —— [('name', 'xuebi'), ('age', 20), ('gender', 'female')]
print(dict(list(d3.items()))) # 打回原形(變回字典)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female'}
# 格式:字典名['鍵']='新的值'
d3 = dict(name='xuebi', age=20, gender='female')
# print(d3['gender']='male')
# —— SyntaxError: keyword can't be an expression
# d3 = d3['gender']='male'
# print(d3)
# —— TypeError: 'str' object does not support item assignment
d3['gender']='male'
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'male'}
# 格式:字典名['字典中不存在的鍵']='新的值'
# 當字典中存在這個鍵時進行賦值時是修改操作
# 反之,當不存在時纳鼎,會進行添加
d3 = dict(name='xuebi', age=20, gender='female')
d3['addr']='湛江市赤坎區(qū)'
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)'}
d3['phone']='7533'
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
# 1. del可以刪除整個字典俺夕,或者其中的指定元素
# del d3 # 整個字典被完全刪除,連名字都沒了
d3 = {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
# print(d3)
# —— NameError: name 'd3' is not defined
# 根據(jù)鍵刪除整個元素
del d3['phone']
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)'}贱鄙、
# 2. 字典名.clear() 刪除字典的所有數(shù)據(jù)
d3 = {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
d3.clear() # 還是一個空字典
print(d3)
# —— {}
# 3. 字典名.pop() 刪除指定鍵所對應的值劝贸,返回整個值并且從字典中把它移除
d3 = {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
# ret = d3.pop()
# print(ret)
# —— TypeError: pop expected at least 1 arguments, got 0
ret = d3.pop('addr')
print(ret)
# —— 湛江市赤坎區(qū)
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female', 'phone': '7533'}
# -----------------------------
# ***拓展***
# 字典名.popitem() 按照后進先出的順序返回并刪除字典的最后的鍵值對
d3.popitem()
print(d3)
# —— {'name': 'xuebi', 'age': 20, 'gender': 'female'}
d3.popitem()
print(d3)
# —— {'name': 'xuebi', 'age': 20}
d3.popitem()
print(d3)
# —— {'name': 'xuebi'}
d3.popitem()
print(d3)
# —— {}
# d3.popitem()
# print(d3)
# —— KeyError: 'popitem(): dictionary is empty'
d3 = {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
print('name' in d3.keys())
# —— True
print('name' in d3)
# —— True
print('name' not in d3)
# —— False
d3 = {'name': 'xuebi', 'age': 20, 'gender': 'female', 'addr': '湛江市赤坎區(qū)', 'phone': '7533'}
# 遍歷字典所有的鍵
for key in d3.keys():
print(key)
# —— name
# age
# gender
# addr
# phone
# 遍歷字典所有的值
for value in d3.values():
print(value)
# —— xuebi
# 20
# female
# 湛江市赤坎區(qū)
# 7533
# 遍歷字典所有的項
for key_value in d3.items():
print(key_value) # 返回的是一個元組
# —— ('name', 'xuebi')
# ('age', 20)
# ('gender', 'female')
# ('addr', '湛江市赤坎區(qū)')
# ('phone', '7533')
# 遍歷字典所有的鍵值
for key, value in d3.items():
print(key, '---->', value)
# —— name ----> xuebi
# age ----> 20
# gender ----> female
# addr ----> 湛江市赤坎區(qū)
# phone ----> 7533
# {key:value for 臨時變量 in 可迭代對象 if 條件}
from random import randint
grade = {'student{}'.format(x): randint(0, 100) for x in range(1, 11)}
print(grade)
# —— {'student1': 34, 'student2': 69, 'student3': 21, 'student4': 24, 'student5': 18, 'student6': 23, 'student7': 26, 'student8': 84, 'student9': 20, 'student10': 32}
# 1. 普通做法:
jige = {}
for k,v in grade.items():
if v > 60:
jige[k]=v
print(jige)
# —— {'student2': 69, 'student8': 84}
# 2. 使用字典推導式(字典解析)
jige2 = {k:v for k,v in grade.items() if v>60}
print(jige2)
# —— {'student2': 69, 'student8': 84}
# jige3 = {'student{}'.format(x): randint(0, 101) for x in range(1, 11) if randint(0, 100)>60}
# print(jige3)
# —— 小老弟,這方法不行
strings = ['import', 'is', 'with', 'if', 'file', 'exception', 'liuhu']
# 1逗宁、
print({val: index for index, val in enumerate(strings)})
# —— {'import': 0, 'is': 1, 'with': 2, 'if': 3, 'file': 4, 'exception': 5, 'liuhu': 6}
# 2映九、
print({strings[i]: i for i in range(len(strings))})
# —— {'import': 0, 'is': 1, 'with': 2, 'if': 3, 'file': 4, 'exception': 5, 'liuhu': 6}
# 3、
print({v: len(v) for v in strings})
# —— {'import': 6, 'is': 2, 'with': 4, 'if': 2, 'file': 4, 'exception': 9, 'liuhu': 5}
mc = {'a': 10, 'b': 34, 'A': 8, 'Z': 3}
# 把全部英文字母改成小寫后再合并
print({k.lower(): mc.get(k.lower(), 0)+mc.get(k.upper(), 0) for k in mc.keys()})
# —— {'a': 18, 'b': 34, 'z': 3}