Python序列应用-字典
<p>1、字典定义</p>
<pre><code>1.1、定义
1.字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分割,以大括号包围的序列。
2.字典是python基础数据类型当中唯一一个映射关系的数据类型。
3.由于字典无序,所以我们定义字典和字典生成之后的元素的顺序是不同的。
1.2、案例
dict1 = {'name':'jason','pwd':123456}
dict2 = {
'id1':{'name':'jason','password':123456},
'id2':{'name':'张三','password':123456}
}
dict3 = {
'id1':['jason',123456]
'id2':['张三',123456]
}</code></pre>
<p>2、字典特点</p>
<pre><code>(1)字典是无序的,字典没有索引值.
(2)字典以键取值,(字典的键相当于列表的索引)。
(3)字典的键唯一且不可修改;列表和字典不可以给字典做键。
(4)字典是任意对象的无序集合。
(5)字典是可变的,可以任意嵌套。</code></pre>
<p>3、创建字典</p>
<pre><code>3.1、直接创建
方法
dict={"key1":"val1","key2":"val2"..."keyn":"valn"}
参数说明:
dict:字典名称
key:元素的键,必须是唯一不可变的,可以是元组、字符串、数字。
val:元素的值,可以是任意数据类型。
案例
dict={"name":"keru","sal":"20k","age":"18"}
print(dict)
输出:
{'name': 'keru', 'sal': '20k', 'age': '18'}
3.2、创建空字典
(1)直接创建
方法
dict={}或dict=dict()
案例
dict={}
print(dict)
print(type(dict))
输出:
{}
<class 'dict'>
AA=dict()
print(AA)
print(type(AA))
输出:
{}
<class 'dict'>
(2)通过dict对象的fromkeys()方法创建
方法
d=dict.fromkeys(list)
参数说明:
d:字典名称。
list:字典键的列表。
案例
list=["老大","老二","老三","老四"]
d=dict.fromkeys(list)
print(d)
输出:{'老大': None, '老二': None, '老三': None, '老四': None}
(3)通过已经存在的元组和列表创建
方法
d={tuple:list}
3.3、通过映射函数创建字典
方法
d=dict(zip(list1,list2))
参数说明:
d:字典名称
zip():用于将多个列表或元组对应位置的元素组合为元组,并返回包含这些内容的zip对象。
如果想得到元组,可以将zip对象使用tuple()函数转化为元组。
如果想得到列表,可以将zip对象使用list()函数转化为列表。
list1:1个列表,用于指定要生成字典的键。
list2:1个列表,用于指定要生成字典的值;如果list1和list2的长度不同,则与最短的列表长度一致。
注意:在python2.x中,zip()函数返回的内容为包含元组的列表。
案例
name=["老大","老二","老三","老四"]
sign=["水瓶","双鱼","射手","双子","狮子"]
d=dict(zip(name,sign))
print(d)
输出:
{'老大': '水瓶', '老二': '双鱼', '老三': '射手', '老四': '双子'}</code></pre>
<p>3.4、通过给定的"键值对"创建字典
方法
d=dict(key1=val1...keyn=valn)</p>
<pre><code>案例
d=dict(老大="水瓶",老二="双鱼",老三="射手",老四="双子")
print(d)
输出:
{'老大': '水瓶', '老二': '双鱼', '老三': '射手', '老四': '双子'}
案例
tuple=("老大","老二","老三","老四")
list=["水瓶","双鱼","射手","双子"]
d={tuple:list}
print(d)
输出:{('老大', '老二', '老三', '老四'): ['水瓶', '双鱼', '射手', '双子']}</code></pre>
<p>4、删除字典</p>
<pre><code>4.1、删除整个字典
方法
del dict
dict = dict(zip("12345","abcde"))
del dict
print(dict)
输出:
<class 'dict'>
4.2、删除指定键对应的值
方法
del dict["key"]
dict = dict(zip("12345","abcde"))
del dict["2"]
print(dict)
输出:
{'1': 'a', '3': 'c', '4': 'd', '5': 'e'}
4.3、删除字典所有元素,成为空字典
方法
dict.clear()
dict = dict(zip("12345","abcde"))
print(dict.clear())
print(dict)
print(dict.items())
输出:
None
{}
dict_items([])
4.4、弹出,返回并删除指定"键"对应的值
方法
dict.pop("key")
dict = dict(zip("12345","abcde"))
print(dict.pop("1"))
print(dict)
print(dict.items())
输出:
a
{'3': 'c', '4': 'd', '5': 'e', '2': 'b'}
dict_items([('3', 'c'), ('4', 'd'), ('5', 'e'), ('2', 'b')])
4.5、随机删除并返回字典中的一个键值元组,这里随机的原因是因为字典无序
方法
dict.popitem()
dict = dict(zip("12345","abcde"))
print(dict.popitem())
print(dict)
print(dict.items())
输出:
('2', 'b')
{'3': 'c', '1': 'a', '5': 'e', '4': 'd'}
dict_items([('3', 'c'), ('1', 'a'), ('5', 'e'), ('4', 'd')])</code></pre>
<p>5、访问字典</p>
<pre><code>print(dict)
print(dict[key])
print("key的星座是:",dict["key"] if "" in dict else "字典里无此人")
print("key的星座是:",dict.get("key","字典里无此人"))</code></pre>
<p>6、遍历字典</p>
<pre><code>方法
dict.items()
案例
dict={"AA":"111","BB":"222","CC":"333"}
for i in dict.items():
print(i)
输出:
('AA', '111')
('BB', '222')
('CC', '333')
案例
dict={"AA":"111","BB":"222","CC":"333"}
for key,value in dict.items():
print(key,value)
输出:
AA 111
BB 222
CC 333</code></pre>
<p>7、字典推导式</p>
<pre><code>使用字典推导式可以快速生成1个字典。
案例
import random
randomdict = {i:random.randint(10,100) for i in range(1,5)}
print("生成的字典为:",randomdict)
输出:
生成的字典为: {1: 12, 2: 91, 3: 10, 4: 79}</code></pre>
<p>8、添加字典元素</p>
<pre><code>方法
dict[key]=value
说明
如果key不存在,就会向字典里添加1个元素。
如果key已存在,则会直接修改key对应的值。</code></pre>
<p>9、修改字典元素</p>
<pre><code>方法
dict[key]=value
说明
如果key不存在,就会向字典里添加1个元素。
如果key已存在,则会直接修改key对应的值。</code></pre>
<p>10、删除字典元素</p>
<pre><code>方法
del dict["key"]
案例
dict = dict(zip("12345","abcde"))
if "2" in dict: /这里加1个判断的作用是为了防止假如"2"不存在抛出的异常。
del dict["2"]
print(dict)
输出:
{'1': 'a', '3': 'c', '4': 'd', '5': 'e'}</code></pre>
<p>11、字典的判断</p>
<pre><code>方法
in
案例
判断指定的键是否在字典当中。
dict = dict(zip("12345","abcde"))
print("1" in dict)
print("6" in dict)
输出:
True
False</code></pre>
<p>12、字典的取值</p>
<pre><code>12.1、keys
获取字典所有的键
dict = dict(zip("12345","abcde"))
print(dict)
输出:
{'1': 'a', '5': 'e', '3': 'c', '2': 'b', '4': 'd'}
print(dict.keys())
输出:
dict_keys(['3', '2', '4', '5', '1'])
for keys in dict.keys():
print(keys,end="")
输出:
12354
12.2、values
获取字典所有的值
dict = dict(zip("12345","abcde"))
print(dict.values())
输出:
dict_values(['a', 'c', 'd', 'e', 'b'])
for values in dict.values():
print(values,end="")
输出:
acdeb
12.3、items
返回字典键值呈元组形式的格式,键和值
dict = dict(zip("12345","abcde"))
print(dict.items())
输出:
dict_items([('4', 'd'), ('1', 'a'), ('5', 'e'), ('3', 'c'), ('2', 'b')])
for items in dict.items():
print(items,end="")
输出:
('4', 'd')('1', 'a')('5', 'e')('3', 'c')('2', 'b')
12.4、get
以键取值,如果指定键不存在,默认返回None,可以指定返回内容
dict = dict(zip("12345","abcde"))
print(dict.get("1"))
print(dict["1"])
print(dict.get("6"))
print(dict["6"])
输出:
a
a
None
KeyError: '6'
12.5、update
更新指定键的内容,如果键不存在,创建
12.6、setdefault
设置默认,如果键存在,返回值,如果键不存在,创造键,值默认为 None,值也可以自定义
dict = dict(zip("12345","abcde"))
print(dict.setdefault("1"))
print(dict.setdefault("6"))
print(dict.setdefault("5","w"))
print(dict.setdefault("6","w"))
输出:
a
None
e
None</code></pre>
<p>13、zip函数的用法</p>
<pre><code>zip 将序列对应索引位上的元素集合到一个元组当中。
dict(zip(“abc”,range(3))) fromkeys
print(zip((1,2,3),["a","b","c"],"efg"))
输出:
<zip object at 0x000002947B8B8048>
[(1,"a","e"),(2,"b","f"),(3,"c","g")]
print(dict([(1,"a"),(2,"b"),(3,"c")]))
print(dict(zip(range(1,4),"abc")))
输出:
{1: 'a', 2: 'b', 3: 'c'}
{1: 'a', 2: 'b', 3: 'c'}</code></pre>
<p>14、fromkeys的用法</p>
<pre><code>以后面序号的元素为键,None为值的字典。
print({}.fromkeys("abc"))
print({}.fromkeys("123"))
输出:
{'b': None, 'c': None, 'a': None}
{'1': None, '2': None, '3': None}</code></pre>
<p>15、视图模式</p>
<pre><code>viewitems
viewkeys
viewvalues
视图模式的主要特征是与字典保持同步,在我们 python 基础部分不做深入研究。
dict = dict(zip("12345","abcde"))
print(dict.viewitems())
print(dict.viewkeys())
print(dict.iviewvalues())
输出:
AttributeError: 'dict' object has no attribute 'viewitems'
AttributeError: 'dict' object has no attribute 'viewkeys'
AttributeError: 'dict' object has no attribute 'iviewvalues'</code></pre>
<p>16、迭代模式</p>
<pre><code>Iteritems
iterkeys
itervalues
在python2.4版本之后,为了提高python运行效率python提出了迭代器、生成器、装饰器的定义,而字典的迭代模式正式去用了迭代器原理, 当我们直接调用的时候,我们只能得到一个内存地址,但我们具体想要取值的时候,需要借助next方法。
dict = dict(zip("12345","abcde"))
print(dict.iteritems())
print(dict.iterkeys())
print(dict.itervalues())
输出:
AttributeError: 'dict' object has no attribute 'iteritems'
AttributeError: 'dict' object has no attribute 'iterkeys'
AttributeError: 'dict' object has no attribute 'itervalues'</code></pre>