字典

# -*- 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)建字典
# 空字典
# 創(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'
  • 判斷一個key是否在列表中
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}
  • 篩選大于60分成績的學生
# 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}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末瞎颗,一起剝皮案震驚了整個濱河市件甥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哼拔,老刑警劉巖引有,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異管挟,居然都是意外死亡,警方通過查閱死者的電腦和手機弄捕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門僻孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人守谓,你說我怎么就攤上這事穿铆。” “怎么了斋荞?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵荞雏,是天一觀的道長。 經常有香客問我平酿,道長凤优,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任蜈彼,我火速辦了婚禮筑辨,結果婚禮上,老公的妹妹穿的比我還像新娘幸逆。我一直安慰自己棍辕,他們只是感情好暮现,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著楚昭,像睡著了一般栖袋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抚太,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天塘幅,我揣著相機與錄音,去河邊找鬼凭舶。 笑死晌块,一個胖子當著我的面吹牛,可吹牛的內容都是我干的帅霜。 我是一名探鬼主播匆背,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼身冀!你這毒婦竟也來了钝尸?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤搂根,失蹤者是張志新(化名)和其女友劉穎珍促,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剩愧,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡猪叙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了仁卷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穴翩。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锦积,靈堂內的尸體忽然破棺而出芒帕,到底是詐尸還是另有隱情,我是刑警寧澤丰介,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布背蟆,位于F島的核電站,受9級特大地震影響哮幢,放射性物質發(fā)生泄漏带膀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一橙垢、第九天 我趴在偏房一處隱蔽的房頂上張望本砰。 院中可真熱鬧,春花似錦钢悲、人聲如沸点额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽还棱。三九已至载慈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珍手,已是汗流浹背办铡。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琳要,地道東北人寡具。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像稚补,于是被迫代替她去往敵國和親童叠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容