Python学习笔记6-字典Dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
>>> person = {"name":"keven","age":15,"gender":"male"} >>> person['name'] 'keven' >>> type(person) <type 'dict'>
字典可以原地修改,即它是可变的。
>>> dict1={} >>> id(dict1) 139736380198256 >>> dict1["name"] = "Keven" >>> id(dict1) 139736380198256 >>> dict1 {'name': 'Keven'}
利用元组在建构字典,方法如下:
>>> name = (["first","Google"],["second","Yahoo"]) >>> website = dict(name) >>> website {'second': 'Yahoo', 'first': 'Google'}
或者用这样的方法:
>>> ad = dict(name="keven", age=42) >>> ad {'age': 42, 'name': 'keven‘
基本操作
• len(d),返回字典(d)中的键值对的数量
>>> city_code = {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'} >>> len(city_code) 4
• d[key],返回字典(d)中的键(key)的值
>>> city_code["suzhou"] '0512'
• d[key]=value,将值(value)赋给字典(d)中的键(key)
>>> city_code = {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'} >>> city_code["shenzhen"]="1212" >>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315', 'shenzhen': '1212'}
• del d[key],删除字典(d)的键(key)项(将该键值对删除)
>>> del city_code["shanghai"] >>> city_code {'suzhou': '0512', 'beijing': '011', 'tangshan': '0315', 'shenzhen': '1212'}
• key in d,检查字典(d)中是否含有键为 key 的项
>>> "shenzhen" in city_code True >>> "sz" in city_code False
字典也可以实现格式化字符
>>> city_code = {"suzhou":"0512", "tangshan":"0315", "hangzhou":"0571"} >>> " Suzhou is a beautiful city, its area code is %(suzhou)s" % city_code ' Suzhou is a beautiful city, its area code is 0512
字典的常用操作方法:
copy
它与赋值的方式不一样,它会在内存中另辟了一个空间,但是需要注意的是:对于不是基础类型的,比如刚才字典的值是列表,Python 不会在被复制的那个对象
中重新存储,而是用引用的方式,指向原来的值。
>>> ad = {"name":"qiwsir", "lang":"Python"} >>> cd = ad.copy() >>> cd {'lang': 'Python', 'name': 'qiwsir'} >>> id(ad) 139736371470416 >>> id(cd) 139736371472376
与赋值的差别,id并没有改变
>>> ed=ad >>> ed {'lang': 'Python', 'name': 'qiwsir'} >>> id(ed) 139736371470416
clear
清空字典中所有元素的操作
>>> ad = {"name":"qiwsir", "lang":"Python"} >>> ad.clear() >>> ad {}
get
dict.get() 就是要得到字典中某个键的值
>>> ad = {"name":"sir", "lang":"Python"} >>> ad.get("name") 'sir'
setdefault
首先,它要执行D.get(k,d) ,就跟前面一样了,然后,进一步执行另外一个操作,如果键k不在字典中,就在字典中增加这个键值对。当然,如果有就没有必要执行这一步了。
>>> ad = {"name":"sir"} >>> ad.setdefault("lang","python") 'python' >>> ad {'lang': 'pytghon', 'name': 'sir'} >>> ad.setdefault("name","python") 'sir' >>> ad {'lang': 'python', 'name': 'sir'}
items
D.items() 能够得到一个关于字典的列表,列表中的元素是由字典中的键和值组成的元组
>>> d={"name":"Keven","age":"20"} >>> d.items() [('age', '20'), ('name', 'Keven')]
iteritems
得到的是一个“迭代器”,这个迭代器是关于“D.items()”的,这种迭代器类型的数据不能直接输出,必须用list() 转换一下,才能看到里面的真面目。
>>> d={"name":"Keven","age":"20","gender":"femal"} >>> d_iter = d.iteritems() >>> d_iter <dictionary-itemiterator object at 0x7f085c980ba8> >>> type(d_iter) <type 'dictionary-itemiterator'> >>> list(d_iter) [('gender', 'femal'), ('age', '20'), ('name', 'Keven')]
keys和value
>>> d={"name":"Keven","age":"20","gender":"femal"} >>> d.keys() ['gender', 'age', 'name'] >>> d.values() ['femal', '20', 'Keven']
pop
根据key删除
>>> d={"name":"Keven","age":"20","gender":"femal"} >>> d.pop("name") 'Keven' >>> d {'gender': 'femal', 'age': '20'}
popitem
D.popitem() 倒是跟list.pop() 有相似之处,不用写参数(list.pop 是可以不写参数),但是, D.popitem() 不是删除最后一个,dict 没有顺序,也就没有最后和最先了,它是随机删除一个,并将所删除的返回。
>>> d={"name":"Keven","age":"20","gender":"femal"} >>> d.popitem() ('gender', 'femal') >>> d {'age': '20', 'name': 'Keven'}
update
把一个字典的值加入进来
>>> d1 = {"lang":"python"} >>> d2 = {'age': '20', 'name': 'Keven'} >>> d1.update(d2) >>> d1 {'lang': 'python', 'age': '20', 'name': 'Keven'}
还可以用下面的方法更新:
>>> d1 = {"lang":"python"} >>> d1.update([("name","Keven"),("age","16")]) >>> d1 {'lang': 'python', 'age': '16', 'name': 'Keven'}
has_key
判断字典中是否有某一个键值
>>> d={"name":"Keven","age":"20","gender":"femal"} >>> d.has_key("name") True >>> "name" in d True
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了