1. 创建字典的多种方式
a["IPhone"] = "Apple"
b = {"吕布":"口口布", "关羽":"关习习", "刘备":"刘又田"}
c = dict(吕布="口口布", 关羽="关习习", 刘备="刘又田")
d = dict([("吕布", "口口布"), ("关羽", "关习习"), ("刘备", "刘又田")])
e = dict({"吕布":"口口布", "关羽":"关习习", "刘备":"刘又田"}) #dict()括号内其实是b后的参数
f = dict({"吕布":"口口布", "关羽":"关习习"}, 刘备="刘又田")
g = dict(zip(["吕布","关羽","刘备"], ["口口布","关习习","刘又田"]))
>>> b == c == d == e == f == g
True
2. 增 - dict.fromkeys
>>> x = dict.fromkeys("Hello", 100) #创建所有键的值都相同的方式
>>> x
{'H': 100, 'e': 100, 'l': 100, 'o': 100}
>>> x['H'] = 70 #可通过此方式修改,如果此处修改的键值对不在字典中,那么会在字典中新增一个键值对
>>> x
{'H': 70, 'e': 100, 'l': 100, 'o': 100}
3. 删 - pop & del & clear
//pop删除
>>> x.pop('o') #pop删除指定键值对
100
>>> x
{'H': 70, 'e': 100, 'l': 100}
>>> x.pop('s') #当删除到没有的键值对时会报错
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
x.pop('s')
KeyError: 's'
>>> x.pop('s', "没有") #添加default参数能让报错变成添加的字符
'没有'
>>> x.popitem() #删除最后一个添加的键值对(修改的不算)
('l', 100)
>>> x
{'H': 70, 'e': 100}
//del删除
>>> del x['H'] #同样删除指定键可以用del的方式
>>> x
{'e': 100}
>>> del x #del加字典名称,能删除整个字典
>>> x #删除后报错x没有被定义
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
x
NameError: name 'x' is not defined
//clear清空字典
>>> x = dict.fromkeys("Hello", 100)
>>> x
{'H': 100, 'e': 100, 'l': 100, 'o': 100}
>>> x.clear()
>>> x
{}
4. 改 - update
>>> x = dict.fromkeys("Hello", 100)
>>> x['o'] = 50 #只能修改一个键值对
>>> x
{'H': 100, 'e': 100, 'l': 100, 'o': 50}
//update可修改多个键值对
>>> x = dict.fromkeys("Hello")
>>> x
{'H': None, 'e': None, 'l': None, 'o': None}
>>> x.update({'H':105, 'l':104})
>>> x
{'H': 105, 'e': None, 'l': 104, 'o': None}
>>> x.update(e='70', o='80')
>>> x
{'H': 105, 'e': '70', 'l': 104, 'o': '80'}
5. 查 - get & setdefault
//普通查询方式
>>> x['e'] #使用此方式查询时,如果查询到字典中没有的字符,会报错
'70'
//使用get参数,能在查询字典没有的空值时返回指定的字符
>>> x.get('A', "没有A")
'没有A'
//使用setdefault参数查询字典时,如果遇到字典中没有的,可将查询的字符插入进去
>>> x.setdefault('H', "code") #当查询字典中有的值时,返回H键的结果,不修改H的值
105
>>> x.setdefault('C', "code") #当查询字典中没有C的时候,直接将C键插入字典的,并将code作为对应的值
'code'
>>> x
{'H': 105, 'e': '70', 'l': 104, 'o': '80', 'C': 'code'}
//视图对象 (当字典发生变化,视图对象也会跟这变)
>>> A = x.keys() #创建字典键的视图对象
>>> B = x.values() #创建字典值的视图对象
>>> C = x.items() #C中存储了A和B的键值对
>>> A
dict_keys(['H', 'e', 'l', 'o', 'C'])
>>> B
dict_values([105, '70', 104, '80', 'code'])
>>> C
dict_items([('H', 105), ('e', '70'), ('l', 104), ('o', '80'), ('C', 'code')])
>>> x.pop('C') #当字典中删除了一个键值对,那么对应视图对象中的键值对也就消失了
'code'
>>> x
{'H': 105, 'e': '70', 'l': 104, 'o': '80'}
>>> A
dict_keys(['H', 'e', 'l', 'o'])
>>> B
dict_values([105, '70', 104, '80'])
>>> C
dict_items([('H', 105), ('e', '70'), ('l', 104), ('o', '80')])
//补充,浅拷贝
>>> d = x.copy()
>>> d
{'H': 105, 'e': '70', 'l': 104, 'o': '80'}
6. 字典也是可以转换成列表的
>>> list(x) #默认输出字典的键
['H', 'e', 'l', 'o']
>>> list(x.keys()) #输出字典的键
['H', 'e', 'l', 'o']
>>> list(x.values()) #输出字典的值
[105, '70', 104, '80']
//迭代器
>>> a = iter(x)
>>> next(a)
'H'
>>> next(a)
'e'
>>> next(a)
'l'
>>> next(a)
'o'
//排序
>>> x
{'H': 101, 'e': 102, 'l': 103, 'o': 104}
>>> list(reversed(x.values()))
[104, 103, 102, 101]
7. 嵌套
>>> x = {"小明": {"语文":70, "数学":80, "英语":90}, "小红":{"语文":80, "数学":60, "英语":70}}
>>> x
{'小明': {'语文': 70, '数学': 80, '英语': 90}, '小红': {'语文': 80, '数学': 60, '英语': 70}}
>>> x["小明"]["数学"]
80
//也可使用下标索引
>>> x = {"小明": [70,80,90], "小红":[80,60,70]}
>>> x
{'小明': [70, 80, 90], '小红': [80, 60, 70]}
>>> x["小明"][1]
80
8. 字典推导式
>>> x = {'H':80, 'l':90, 'e':100, 'o':108}
>>> x
{'H': 80, 'l': 90, 'e': 100, 'o': 108}
>>> a = {i:h for h,i in x.items()}
>>> a
{80: 'H', 90: 'l', 100: 'e', 108: 'o'}
>>> a = {i:h for h,i in x.items() if i >= 100}
>>> a
{100: 'e', 108: 'o'}
//求出编码值
>>> a = {x:ord(x) for x in "Hello"}
>>> a
{'H': 72, 'e': 101, 'l': 108, 'o': 111}
|