其实,写这个是为了督促自己看书……然后 ……其实没有然后了,人一松懈下来,就……ε=(´ο`*)))唉

第五章 字典和结构化数据

①字典数据类型

像列表一样,“字典”是许多值的集合。但不像列表的下标,字典的索引可以使用许多不同数据类型,不止是整数。字典的索引被称为“键”,键及其关联的值被称为“键-值”对。

在代码中,字典输入时带花括号{}。在交互环境中输入一下代码:

>>>myCat={'size':'fat','color':gray',disposition':'loud'}

这将给字典赋给myCat变量。这个字典的键是'size'、'color'、'disposition'。这些键相应的值是'fat'、'gray'和‘loud'。可以通过他们的键访问这些值:

>>>myCat['size']
'fat'
>>'My cat has '+myCat['color']+' fur.'
'My cat has gray fur.'

字典仍然可以用整数值作为键,就像列表用整数值作为下标一样,但是不要求一定要从0开始,可以是任何数字。

——摘自书81~82页

------------------------那个……再歪个楼-----------------------

昨天在做这题的时候:

发现,真的很多东西,乍一看很好解决,真到自己写的时候,就……

比如,怎么去掉字符串中间的空格,怎么把大写字母转换为小写字母,怎么统计字母出现的次数……种种难题,使我到现在都没把这题A掉,超级蓝瘦(T ^ T)。

不过是真的觉得PY真是黑科技,一行代码可以实现好多功能。

……

又跑题了,对,是要记录一下,这些功能怎么实现。

首先,去掉字符串中间的空格。

string=' soft kitty  warm kitty   little ball of fur~~    happy kitty sleepy kitty  pur pur pur~~                   '

先是字符串↑,我们发现,字符串左右两边都有空格

⑴去掉左边的空格——lstrip

string=' soft kitty  warm kitty   little ball of fur~~    happy kitty sleepy kitty  pur pur pur~~                   '
string.lstrip()
print(string)

输出:

soft kitty  warm kitty   little ball of fur~~    happy kitty sleepy kitty  pur pur pur~~    #右边一直到这里哦

⑵去掉右边的空格——rstrip

与上面的用法相同:字符串名.函数名()#string.rstrip()

⑶去掉左右两边的空格——strip

与上面的用法相同:字符串名.函数名()#string.strip()

补充:

⑷去掉中间的空格

法一:split()
split():通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串

string=' soft kitty  warm kitty   little ball of fur~~    happy kitty sleepy kitty  pur pur pur~~                   '
print(string.split())

output:

['soft', 'kitty', 'warm', 'kitty', 'little', 'ball', 'of', 'fur~~', 'happy', 'kitty', 'sleepy', 'kitty', 'pur', 'pur', 'pur~~']

当然,还可以自定义操作,见点击打开链接

In[3]: a = 'dfdfd*dfjdf**fdjfd*22*'
In[4]: a
Out[4]: 'dfdfd*dfjdf**fdjfd*22*'
In[5]: a.split('*')
Out[5]: ['dfdfd', 'dfjdf', '', 'fdjfd', '22', '']
In[6]: a.split('*',2)
Out[6]: ['dfdfd', 'dfjdf', '*fdjfd*22*']

法二:replace

>>> a = 'hello world'>>> a.replace(' ', '')
'helloworld'

法三:使用正则表达式

>>> import re
>>> strinfo = re.compile()>>> strinfo = re.compile(' ')>>> b = strinfo.sub('', a)
>>> print(b)
helloworld

法四:先转换成列表……在列表中删除……

法五:循环删除……

哭唧唧,那么多方法,最后还是A不了题

大小写转化

这个简单,见百度知道……点击打开链接

可以直接通过str类的swapcase方法可以快速实现大写便小写、小写变大写的功能。In [1]:s='Baidu Zhidao'
In [2]:s.swapcase()
Out[2]:'bAIDU zHIDAO'
与swapcase类似的还有lower和upper方法,它们分别实现将字符串全部变为小写和全部变为大写的功能。In [3]: s.upper()
Out[3]:'BAIDU ZHIDAO'In [4]: s.lower()
Out[4]:'baidu zhidao'

统计字母出现次数(终于讲到字典了,✿✿ヽ(°▽°)ノ✿)

先说单个字母,就是只统计一个字母的那种

string=input()
s=string.lower()
emm=list(s.replace(' ',''))
emm.sort()
print(emm)
num=emm.count(emm[0])
print(emm[0],num)

↑这个是昨天写的代码的修改版,当然,还是不对,就是展示一下count函数的

>>> '1,2,3'.count(',')<br />
2<br />
>>> 'Hello world'.count('l')<br />
3<br />

酱紫,就可以了。大家看,那个,即使已经是列表了,也是可以用的。

然后是统计很多字符:

from collections import Counterstring=input()
s=string.lower()
emm=list(s.replace(' ',''))
print (Counter(emm).most_common(4))
>>> string = 'hello world'
>>> { a:string.count(a) for a in set(string.replace(' ','')) }
{'h': 1, 'e': 1, 'w': 1, 'l': 3, 'o': 2, 'd': 1, 'r': 1}
用的是字典推导式和str自带的统计方法str.count作者:匿名用户
链接:https://www.zhihu.com/question/67528074/answer/254847319
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

点击打开链接

判断是字母还数字

str_1 = "123"
str_2 = "Abc"
str_3 = "123Abc"#用isdigit函数判断是否数字
print(str_1.isdigit())
Ture
print(str_2.isdigit())
False
print(str_3.isdigit())
False#用isalpha判断是否字母
print(str_1.isalpha())
False
print(str_2.isalpha())
Ture
print(str_3.isalpha())
False#isalnum判断是否数字和字母的组合
print(str_1.isalpha())
False
print(str_2.isalpha())
False
print(str_1.isalpha())
Ture

----------------------------------楼好像歪了不少----------------------------

#希望大家还能记得是在第五章,要继续讲一讲字典……

#刚刚翻了一下书,还有好多啊,好绝望,不想写了,但是已经立了flag了,哭唧唧

spam=['cat', 'dogs', 'moose']
bacon=['dogs', 'moose', 'cat']
print(spam==bacon)#output:False
eggs={'name': 'Zophie','species': 'cat','age': '8'}
ham={'species': 'cat','age': '8','name': 'Zophie'}
print(eggs==ham)#output:True

列表和字典的区别还是很明显的,就像数列和集合的区别一样,列表中一个个元素不仅有自己的值还有特定的位置,而字典就像集合,只要在里面就万事大吉。--》字典是不排序的,列表是排序的。

尝试访问不在字典中的键('age'),将导致KeyError报错。

eggs={'name': 'Zophie','species': 'cat'}
print(eggs['age'])

报错信息

Traceback (most recent call last):
  File "/usercode/file.py", line 29, in <module>
    print(eggs['age'])
KeyError: 'age'

字典又是一个很万精油的东西,不挑,任意值都可以作为键,比如书上举例如何将好友的生日作为值,名字作为键。

birthdays={'Alice':'Apr 1','Bob':'Dec 12','Carol':'Mar 4'}
while True:print('Enter a name :(blank to quit)')name=input()if name==' ':breakif name in birthdays:print(birthdays[name]+' is the birthday of '+name)else:print('I do not have birthday information for '+name)print('What is their birthday?')bday=input()birthdays[name]=bdayprint('Birthday database updated.')

当然,这里的数据在程序终止之后,都会丢失,具体如何保存,将在以后的笔记中提到(其实是还没看到那部分)

②keys()、values()和items()方法

有3个字典方法,他们将返回类似列表的值,分别对应字典是键、值和键-值对:keys()、values()和items()。

但是

这些方法返回的不是真正的列表,他们不能被修改,不能应用append()方法。

不过,

这些数据类型(dict_keys、dict_values和dict_items)可以用于for循环。

比如:

spam={'color':'red','age':42}
for v in spam.values():print(v)
'''
output:
42
red
'''

这里for循环迭代了spam字典中的每个值。for循环也可以迭代每个键或者键值对:

spam={'color':'red','age':42}
for k in spam.keys():print(k)
'''
output:
color
age
'''
for i in spam.items():print(i)
'''
output:
('age', 42)
('color', 'red')
'''

items()方法返回的dict_items值中,包含的是键和值的元组,如果想得到真正的列表哦,就要吧类似列表的返回值传递给list()

#多重赋值
spam={'color':'red','age':42}
for k,v in spam.items():print('Keys: '+k+' Values: '+str(v))

output:

Keys: color Values: red
Keys: age Values: 42

--------再歪一个楼---------

据说本书提供源码来着

然后给了这个网址:

https://nostarch.com/automatestuff/

具体……我刚刚打开了,有一个

我估计八成是这个,然后就下载了

下载下来的是一个打开之后,看起来是源码

……

所以,我想说的是

……

那个,小程序的代码我就不放了

……

迅速逃走……

---------------------------------

③检查字典中是否存在键或值

法一:和列表方法类似:

键 in 字典名.keys()

值 in 字典名.values()

返回True或False

也可以采取简写形式,比如:

spam={'name':'Zophie','age':7}

'color' in spam.keys()与'color' in spam都会返回False

法二:get()方法

用于在访问某一个键的值之前,检查该键是否在字典里。

picnicItems={'apples':5,'cups':2}
print('I am bringing '+str(picnicItems.get('cups',0))+' cups.')
print('I am bringing '+str(picnicItems.get('eggs',0))+' eggs.')
'''
output:
I am bringing 2 cups.
I am bringing 0 eggs.
'''

如果不用get():

Traceback (most recent call last):
  File "/usercode/file.py", line 2, in <module>
    print('I am bringing '+str(picnicItems['eggs'])+' eggs.')
KeyError: 'eggs'

④setdefault()方法

D = {'Name': 'Runoob', 'Age': 7}print ("Age 键的值为 : %s" %  D.setdefault('Age','25')) # 键存在在字典中则不会设置为指定值
print ("Sex 键的值为 : %s" %  D.setdefault('Sex', 'NA')) # 键不存在,指定一个值
print ("School 键的值为 : %s" %  D.setdefault('School')) # 键不存在,不指定值,默认为None
print ("新字典为:", D)

输出:
Age 键的值为 : 7
Sex 键的值为 : NA
School 键的值为 : None
新字典为: {'Name': 'Runoob', 'School': None, 'Sex': 'NA', 'Age': 7}

再比如:

'''
picnicItems={'apples':5,'cups':2}
if 'eggs' not in picnicItems:picnicItems['eggs']=2
print(picnicItems)
'''
"""
上面的内容完全可以写作:
"""
picnicItems={'apples':5,'cups':2}
picnicItems.setdefault('eggs',2)
print(picnicItems)
picnicItems={'apples':5,'cups':2}
picnicItems.setdefault('eggs',2)
picnicItems.setdefault('eggs',3)
print(picnicItems)#output:{'apples': 5, 'cups': 2, 'eggs': 2}
'''
即使在后面更改,其实也没有什么作用,这不禁让我想到了const关键字……
'''

⑤漂亮打印

本来不想再写这个的,但是,为终于可以打印正常字典打call……

方法:

在程序中导入pprint模块,就可以使用pprint()和pformat()函数。

--------------------再歪个楼--------------------

刚刚找到疑似资料

https://docs.python.org/2/library/pprint.html

-----------------------------------------------------

import pprint message='The amount of indentation added for each recursive level is specified by indent; the default is one. Other values can cause output to look a little odd, but can make nesting easier to spot. '
count={}for character in message:count.setdefault(character,0)count[character]=count[character]+1
pprint.pprint(count)

输出:

{' ': 34,
 ',': 1,
 '.': 2,
 ';': 1,
 'O': 1,
 'T': 1,
 'a': 12,
 'b': 2,
 'c': 6,
 'd': 9,
 'e': 22,
 'f': 4,
 'g': 1,
 'h': 4,
 'i': 11,
 'k': 2,
 'l': 7,
 'm': 2,
 'n': 11,
 'o': 12,
 'p': 3,
 'r': 5,
 's': 9,
 't': 16,
 'u': 8,
 'v': 3,
 'y': 1}

如果希望打印的是字符串,可以调用pprint.pformat()

print(pprint.pformat(count))

pprint.pprint(count)

等价

'''
好啦,就先到这里啦ヾ(◍°∇°◍)ノ゙
'''

----------------这里是更新的分割线---------------------

from collections import Counterstring=input()
newS=''
string= ''.join(string.split())
string.replace('.','')
for s in string:if s.isalpha():newS+=s
s=''
s=newS.lower()
emm=[]
emm=list(s)
emm.sort()
wa=[]
wa=(Counter(emm).most_common(1))
#print(wa)
#print (wa[0][0])
#print(wa[1][0])
#tup=tuple(wa)
#print(tup)
#for x in tup:
#    print(x)
stri=''
stri=str(wa)
#print(stri)
print(stri[3],stri[7])

之前提过这道题,然后,这个代码……通过的概率……是不确定的……

绝对不是我的问题……

《Python编程快速上手——让繁琐的工作自动化》读书笔记4相关推荐

  1. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  2. MongoDB权威指南读书笔记——CRUD

    插入并保存文档 插入是向MongoDB中添加数据的基本方法.可以使用Insert方法向目标集合插入一个文档:db.foo.insert({"bar" : "baz&quo ...

  3. HTTP权威指南读书笔记

    <<HTTP权威指南>>读书笔记 第一部分:Web的基础 第1章:HTTP概述 主要内容 1.什么是HTTP 2.HTTP的基本组件 HTTP HTTP:HTTP(Hypert ...

  4. HTML5权威指南----读书笔记

    <!DOCTYPE html> <html> <head><meta name = 'keywords' content="HTML5权威指南--- ...

  5. 计算机网络和http权威指南 读书笔记

    计算机网络笔记 网络层 网络层向上提供无连接的,尽最大努力交付的数据报服务 网络层不提供数据质量承诺 物理层使用的中间设备叫转发器repeater 数据链路层叫网桥bridge 网络层叫路由器rout ...

  6. MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)

    文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...

  7. android开发读书笔记,android开发权威指南读书笔记

    第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...

  8. java性能权威指南中文_Java性能权威指南读书笔记--之一

    JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...

  9. javascript权威指南读书笔记之二——词法结构

    本章讲述的内容,用通俗的语言来说,就是应该注意的地方,这些也许和我们所学的其他语言类似,也许完全不同,比如一开始就介绍说javascript程序中的每个字符都是用两个字节表示的,但有些程序设计者习惯于 ...

  10. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...

最新文章

  1. 180615-精度计算BigDecimal
  2. 洛谷 P4245 【模板】MTT
  3. 删除重复数据sql语句
  4. QT-在子控件上绘图的两种方式
  5. 小公司出来的产品经理被大厂鄙视?
  6. 宝藏世界显示连接不到服务器,宝藏世界新手常见问题解答 新手攻略
  7. [-1]是也乎,( ̄▽ ̄)
  8. 2014.7.7模拟赛【无线通讯网】
  9. 手机麦克风结构原理图_一文看懂咪头的工作原理及结构(驻极体话筒)
  10. 深入理解JVM虚拟机(总结篇)
  11. 搜索引擎是如何评估网页内容优劣的
  12. 什麼是雲端服務?阿正老師教你免費玩Amazon EC2雲端主機!(上篇)
  13. [HAOI2006]旅行comf(枚举+最小生成树)
  14. 趣头条递交招股书 将冲刺移动内容聚合第一股
  15. 前端面试题杂烩part1
  16. 外媒分析:为何说苹果一定没造车!
  17. 记录梦幻手游PC端辅助开发及设计思路之整体架构
  18. 华为鸿蒙os适配机型曝光,手机资讯导报:华为鸿蒙OS2.0首批适配机型曝光
  19. XML介绍与使用及简单注解
  20. 利用ip-subnet-vlan(基于ip子网划分vlan) 技术 实现一根网线多VLAN业务

热门文章

  1. 微信小程序定制开发的几大类型
  2. 关于html 背景图片的引用格式
  3. WPF全屏和退出全屏最简单的方法
  4. iOS 获取当前app的名称和版本号
  5. SpringBoot08:Shiro
  6. 训练集和测试集的分布差距太大有好的处理方法吗?
  7. JESD204B参数及时钟关系
  8. 行为识别 - TAM: Temporal Adaptive Module for Video Recognition
  9. 社会信用编码的验证(18位)
  10. ieg技术总监_干货!从程序员到技术总监,大牛内部分享的资料