之前一直使用dir(dict)的时候一直把前后有双“_”的方法也一起放在里面,既然现在也不讲,太多也看着挺烦。
昨天看书的时候顺便看到这个Pythonic的写法--使用列表推导式。这样带“_”也就没有了,剩下的字典操作方法,我尽力说明清楚。
[d for d in dir(west_team_msg) if not d.startswith('_')]
['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
至于什么是列表推导式,后面小结的时候会结合list、tuple、dict的特性加以说明。其实是个很简单的东西,也非常好用,在很多场合可以避免使用遍历+append的操作。
言归正传,自从悟空被大大王吃到肚子里后,就没了消息。三藏便让八戒去打听。八戒哪有悟空机灵,居然在妖怪洞穴门口就开始喊了:我大师兄呢?
里面小妖一看:怎么来个猪头猪脑的,是西天取经队伍的?于是拿出字典开始搜索。
for key,value in west_team_msg.items(): if value["外表"] == "猪": print(key)
这个地方涉及到字典的一个items()方法,作用我们大致看一下 [in]:west_team_msg.items() [out]:dict_items([('三藏', {'外表': '人', '职业': '和尚', '兵器': '无', '事迹': '西天取经', '故地': '东土大唐'}), ('悟空', {'外表': '猴子', '职业': '和尚', '兵器': '金箍棒', '事迹': '大闹天宫', '故地': '花果山', '技能': '七十二变'}), ('八戒', {'外表': '猪', '职业': '和尚', '兵器': '九齿钉耙', '事迹': '调戏嫦娥姐姐', '故地': '高老庄'}), ('悟净', {'外表': '沙妖', '职业': '和尚', '兵器': '降妖宝杖', '事迹': '打碎琉璃盏', '故地': '流沙河'}), ('小白龙', {'外表': '马/人/龙', '职业': '和尚/官二代', '兵器': '大宝剑', '事迹': '火烧明珠', '故地': '西海龙宫'})])
输出有点长,我们稍微格式化一下,看的清楚些 dict_items( [('三藏', {'外表': '人', '职业': '和尚', '兵器': '无', '事迹': '西天取经', '故地': '东土大唐'}), ('悟空', {'外表': '猴子', '职业': '和尚', '兵器': '金箍棒', '事迹': '大闹天宫', '故地': '花果山', '技能': '七十二变'}), ('八戒', {'外表': '猪', '职业': '和尚', '兵器': '九齿钉耙', '事迹': '调戏嫦娥姐姐', '故地': '高老庄'}), ('悟净', {'外表': '沙妖', '职业': '和尚', '兵器': '降妖宝杖', '事迹': '打碎琉璃盏', '故地': '流沙河'}), ('小白龙', {'外表': '马/人/龙', '职业': '和尚/官二代', '兵器': '大宝剑', '事迹': '火烧明珠', '故地': '西海龙宫'}) ])
简化下得到 [('三藏',{}) ('悟空',{}) ('八戒',{}) ......] "三藏","悟空"这些其实是west_team_msg的键(key), 后面的{}就是west_team_msg的键对应的值(value) 也就是说,items()的作用,就是把字典里面所有的键值对单独拿出来编成(key,value)这样的元组形式 那keys,values的作用也很好理解了:就是单独把键或者值拿出来
for key,value in west_team_msg.items(): if value["外表"] == "猪": print(key)
OUTPUT:八戒
这里用for就会遍历items()得到的键值对元组, 如果里面有一个值对应"外表"是"猪",就打印出来,那我们看到得到的结果是"八戒"
写的程序都比较简单,仅仅作为入门演示,实际工作中要尽可能逻辑性强化一点。
这些小妖一看是三藏的徒弟八戒,于是一起大喊道,你大师兄被我们大王吃的,现在估计连骨头渣子都不剩了。
八戒一听大师兄没了,垂头丧气的就回去了。回到村子后,有听悟净说师傅也被不知道哪来的妖风给卷走了。
悟净很着急,八戒却动了歪脑筋:沙师弟,你看师傅和大师兄都没了,不如我们把行李分了,你回你的流沙河,我回我的高老庄。说着就动起了手。
things = {} things["八戒"] = [] things["悟净"] = []
things["悟净"].append("师傅的袈裟") things["八戒"].append("化缘的金钵")
悟净一把抢了过来,把八戒分东西的字典给清除了。
things.pop("八戒") #pop()根据传入的键删除键值对 things.popitem() #popitem()直接把字典里面的一组键值对删除
当然,用clear()是最快的,直接一次性删除字典里面的所有键值对,不过这里悟净是一样一样把东西收回来了,所以分次删除就行。
八戒生气的坐在一边:反正没了师傅,西天也不用去了,分了算了。
悟净劝八戒到:大师兄本领高强,我不相信会被妖怪吃了。于是强拉着八戒一起去找悟空去。
预知后事如何,请听下回因式分解。完结篇将会把剩下的一些操作方法讲完。
创作不易,请大家多多关注、点赞、在看三连支持,谢谢~~