Python Learning Note Day 11
今天是Python学习第十一天,今天主要对字典进行了补充,同时开始做《Python编程从入门到实践》中的第一个项目‘外星人入侵’(PS:灰机大战),pygame做2d游戏,有点意思。
项目的话可能就是一个利用pygame包来做2d游戏的过程。重点可能不在于做游戏本身,而是怎么样一步步把一个项目做出来,然后不断的去重构和优化代码,把一个看似很大的项目分解成不同的模块,各司其职,这点很重要。从做这行起,多数时候我都是独立开发,这种分模块(甚至说需要团队去配合)的机会很少,所以,这一块是我很欠缺的,这样走一圈,可能会更明白自己的代码要怎么写,才能让自己让他人修改和理解起来更简单容易。
接下就来总结下字典部分补充的知识。
补充知识
1. dict函数
函数dict可以从其他映射(如其他字典)或键-值对序列创建字典。
lst=[['ella',123],['timo',234]] d=dict(lst) print(d) # 元组和列表都可以,但是一定是键值对的形式 lst=[('ella',123),['timo',234]] d=dict(lst) print(d)
也可以使用关键字实参的方式提供
# 也可以使用关键字实参的方式提供 d=dict(eimi=123,dona='123a') print(d)
2. 键的类型
字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数)、字符串或元组。
3. 成员资格
表达式k in d(其中d是一个字典)查找的是键而不是值,而表达式v in l(其中l是一个列表)查找的是值而不是索引。这
dicts={'kiwi':123,345:'kiwi'} print('kiwi' in dicts)# True print(123 in dicts)# False
database={ 'Kiwi':{ 'addr':'sichuan', 'age':25 }, 'shine':{ 'addr':'nanchong', 'age':24 } } print(database['Kiwi']['age']) for k,v in database.items(): print(k+':') for key,val in v.items(): print('-'+key+':'+str(val))
4.将字符串格式设置功能用于字典
像下面这样使用字典时,可指定任意数量的转换说明符,条件是所有的字段名都是包含在字典中的键。
string='Kiwi\'s phone is {Kiwi}' phone={'Kiwi':'1387264','Shine':'887799'} print(string.format_map(phone)) # Kiwi's phone is 1387264
5. clear
方法clear删除所有的字典项,这种操作是就地执行的(就像list.sort一样),因此什么都不返回(或者说返回None)。
6. copy
方法copy返回一个新字典,其包含的键值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而非副本)。
from copy import deepcopy # copy dicts={'kiwi':123,'timo':234,'mimi':[12,'kiwi']} dicts_copy=dicts.copy() # {'kiwi': 123, 'timo': 234, 'mimi': [12, 'kiwi']} dicts_deep=deepcopy(dicts) # {'kiwi': 123, 'timo': 234, 'mimi': [12, 'kiwi']} print(dicts_copy) print(dicts_deep) dicts_copy['timo']=876 dicts_copy['mimi'].remove(12) print(dicts_copy) # {'kiwi': 123, 'timo': 876, 'mimi': ['kiwi']} print(dicts) # {'kiwi': 123, 'timo': 876, 'mimi': ['kiwi']} print(dicts_deep) # {'kiwi': 123, 'timo': 234, 'mimi': [12, 'kiwi']}
当替换副本中的值(timo)时,原件不受影响。然而,如果修改副本中的值(就地修改而不是替换),原件也将发生变化,因为原件指向的也是被修改的值(如这个示例中的'mimi'列表所示)。
为避免这种问题,一种办法是执行深复制,即同时复制值及其包含的所有值,等等。为此,可使用模块copy中的函数deepcopy。
7. fromkeys
方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None。
dicts={}.fromkeys(['timor','auruff','ruiz']) print(dicts) # {'timor': None, 'auruff': None, 'ruiz': None}
也可以直接对dict函数使用fromekeys,如果你不想使用默认值None,可提供特定的值。
# 也可以直接对dict函数使用fromekeys dicts_2=dict.fromkeys(['I','love','fyx']) print(dicts_2) # 指定key的值 dicts_3=dict.fromkeys(['I','love','keys'],'❤') print(dicts_3)
8. get
方法get为访问字典项提供了宽松的环境。通常,如果你试图访问字典中没有的项,将引发错误。使用get来访问不存在的键时,没有引发异常,而是返回None。你可指定“默认” 值,这样将返回你指定的值而不是None。
d={'age':19,'addr':'chengdu'} # print(d['name']) # 会引发错误 print(d.get('name'))# None print(d.get('sex','N/A'))# N/A
9. pop
方法pop可用于获取与指定键相关联的值,并将该键-值对从字典中删除。
d={'x':2,'y':1} print(d.pop('x')) print(d) #{'y':1}
10. popitem
方法popitem类似于list.pop,但list.pop弹出列表中的最后一个元素,而popitem随机地弹出一个字典项,因为字典项的顺序是不确定的,没有“最后一个元素”的概念。如果你要以高效地方式逐个删除并处理所有字典项,这可能很有用,因为这样无需先获取键列表。
c={'x':2,'y':1,'z':34,'f':2,'j':1,'a':34} print(c.popitem()) print(c)
11. setdefault
方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外,setdefault还在字典不包含指定的键时,在字典中添加指定的键-值对。
d = {} v=d.setdefault('name', 'N/A') print(v) # N/A print(d) # {'name': 'N/A'} d['name'] = 'Gumby' print(d.setdefault('name', 'N/A')) # 'Gumby' print(d) # {'name': 'Gumby'}
指定的键不存在时,setdefault返回指定的值并相应地更新字典。如果指定的键存在,就返回其值,并保持字典不变。与get一样,值是可选的;如果没有指定,默认为None。
12. update
方法update使用一个字典中的项来更新另一个字典。 对于通过参数提供的字典,将其项添加到当前字典中。如果当前字典包含键相同的项,就替换它。
d = {
'title': 'Python Web Site',
'url': 'http://www.python.org',
'changed': 'Mar 14 22:09:15 MET 2016'
}
x = {'title': 'qingwei.tech'}
y = {'url': 'https://www.qingwei.tech'}
d.update(x)
d.update(y)
print(d)
# {'title': 'qingwei.tech', 'url': 'https://www.qingwei.tech',
# 'changed': 'Mar 14 22:09:15 MET 2016'}
z={'hehe':'eeee'}
d.update(z)
print(d)
# {'title': 'qingwei.tech', 'url': 'https://www.qingwei.tech',
# 'changed': 'Mar 14 22:09:15 MET 2016', 'hehe': 'eeee'}
13.本章介绍的新函数
dict(seq) 从键-值对、映射或关键字参数创建字典。
时间不够用啊!
版权声明:
作者:Kiwi
链接:https://www.qingwei.tech/programe-develops/923.html
来源:清渭技术小站
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论