一、字典

Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

f = {key1 : value1, key2 : value2 }

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d)

查看打印结果:可以看到字典里面的排序是无序的。

1、查看元素

如果我们要查看某个键值的值,把相应的键放入方括弧,字典没有下标,直接取key,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d)
    print(d['name'])

执行查看结果:

还可以用get方法获取键值,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d)
    print(d['name'])
    print(d.get('name'))

差看执行结果:

当get的键值不存在的时候会返回默认值:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d.get('weight'))

查看执行结果:

None

2、增加元素

    如果需要增加元素就直接在方括号中写入key名,然后写入相应的值,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    d['phone']='13102011111111'
    print(d)

查看执行结果,加入了phone:

setdefault()方法和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default值,我们看一下和get的区别:

  1.  
  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d.get('weight',120))
    print(d)
    t={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(t.setdefault('weight',130))
    print(t)

查看执行结果:

120
{'age': 12, 'name': 'pei', 'money': 19000, 'sex': '女', 'addr': '昌平'}
130
{'age': 12, 'name': 'pei', 'sex': '女', 'addr': '昌平', 'money': 19000, 'weight': 130}

可以看到,get的key不存在的时候,只会返回默认值,不会添加到字典中,setdefault的可以不存在的场合,会返回默认值,并把key 添加到字典中,并默认值赋值;

3、修改元素

如果需要修改字典中的键值,同样也是在方括号中写入已有的key值,然后写入相应的值,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    d['name']='yingfei'
    print(d)

查看执行结果:

4、删除字典元素

如果只需删除一个元素,可以用del命令:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    del d['name']

查看执行结果:

{'addr': '昌平', 'money': 19000, 'sex': '女', 'age': 12}

如果需要清空字典表,用clear方法,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    d.clear()
    print(d)

查看执行结果:

{}

如果需要删除字典表,可以用del,例如:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    del d
    print(d)

查看执行结果:

我们可以看到,d这个字典已经不存在了

和列表一样,还可以用pop()方法删除一个元素
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    d.pop('name')
    print(d)

查看执行结果:

{'sex': '女', 'addr': '昌平', 'age': 12, 'money': 19000}

popitem()方法也可以用来删除,由于字典是无序的,所以popitem方法会随机删除字典中的一个元素,例如

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    d.popitem()
    print(d)

查看执行结果:

{'name': 'pei', 'age': 12, 'addr': '昌平', 'sex': '女'}

 5、字典的其他方法

keys以列表形式返回一个字典所有的键;

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d.keys())

执行结果:

dict_keys(['addr', 'name', 'sex', 'age', 'money'])

values,以列表返回字典中的所有值;

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    print(d.values())

查看执行结果:

dict_values(['女', '昌平', 12, 'pei', 19000])

6、循环

我们对字典进行循环操作,看一下得到的结果:

  1. d={'name':'pei','age':12,'sex':'女','addr':'昌平','money':19000}
    for k in d:
    print(k)
    for k in d:
    print(k,d.get(k))
    for k in d:
    print(k,d[k])
    for k,v in d.items():
    print(k,v)
    查看执行结果:
    money
    name
    addr
    sex
    age
    我直接对列表循环,我们得到的只有key
    要想得到keyvalue值,需要单独取获取;
  2.  
  3. money 19000
    name pei
    addr 昌平
    sex
    age 12
  4.  
  5. money 19000
    name pei
    addr 昌平
    sex
    age 12
  1. item方法,以列表返回可遍历的(键, 值) 元组数组,
  1. money 19000
    name pei
    addr 昌平
    sex
    age 12

练习:

下面我们看一下列表与字典的实际应用,通常情况下,两者都是结合使用的。例如:

  1. stus = {
    'pei': {
    'age': 18,
    'sex': '男',
    'addr': '昌平区',
    'money': 10000000,
    'jinku': {
    '建行卡': 80000,
    '工商卡': 800000,
    '招商卡': 8000000
    }
    },
    'li': {
    'age': 19,
    'sex': '女',
    'addr': '昌平区',
    'money': 10000000,
    'huazhuangpin': ['chanle','haha']
    },
    'wang': {
    'age': 19,
    'sex': '女',
    'addr': '昌平区',
    'money': 10000000,
    "bag": {
    'lv': '一车',
    '鳄鱼':10
    }
    },
    }

以上,

1.我们要取到‘pei’的招商卡的金额:

print(stus['pei']['jinku']['招商卡'])
查看执行结果:8000000

2.我们要取到‘li’的化妆品种类

  1. print(stus['li']['huazhuangpin'])
  1. 查看执行结果:['chanle', 'haha']

3.我们查看‘wang’的bag的种类:

  1. print(stus['wang']['bag'].keys())

查看执行结果:dict_keys(['lv', '鳄鱼'])

4.如果我们查‘wang’的bag的总数量呢:

我们可以直接使用内置的函数sum(),如下:

  1. print(sum(stus['wang']['bag'].values()))

查看执行结果:100

还可以用相加的方法:

  1. ls=stus['wang']['bag'].values()
    sum=0
    for i in ls:
    sum=sum+i
    print(sum)

查看执行结果:100

再来做一个小实验:

#####################################################

#用户注册:存入字典表中,注册时进行非空验证,,验证密码和确认密码是否一致,已经存在的不能重复注册

  1.  
  1. user={}
    while True:
    username=input('请输入您的账号:').strip()
    passwd=input('请输入您的密码:').strip()
    cpasswd=input('请确认您的密码:').strip()
    if username and passwd:
    if username in user:
    print('用户已经存在,请重新输入!')
  2.  
  3. else:
    if passwd==cpasswd:
    print('恭喜您,注册成功!')
    user[username]=passwd
    break
    else:
    print('两次密码不一致,请重新输入!')
  4.  
  5. else:
    print('用户名或密码不能为空!请重新输入。')
  6.  
  7. while True:
    usr=input('请输入您的账号:').strip()
    pwd=input('请输入您的密码:').strip()
    if usr and pwd :
    if usr in user:
    if pwd==user[usr]:
    print('恭喜您登陆成功!')
    break
    else:
    print('密码不正确,请重新登陆!')
    else:
    print('用户名密码不存在,请重新登陆!')
    else:
    print('用户名或密码不能为空,请重新登陆')
  1.  

大家执行一下看一下结果吧~

元组

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

1、创建

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

如下:

  1. a=(1)
    b=('111','222','333')#元祖也是list,只不过不能变
    print(a)
    print(b)

执行查看结果:

1
('111', '222', '333')

2、修改元组

元组中的元素值是不允许修改的:

  1. b=('111','222','333')
    print(b)
    b[0]=12
    print(b[0])

我们执行看一下,看到执行的结果报错了。

TypeError: 'tuple' object does not support item assignment

#可变变量:创建后可以修改
#不可变变量:一旦创建后,不能修改,如果修改只能重新定义,例如元祖和字符串

  1. mysql2=('182.168.55.14',8080,'pei','123456')#不可变,防止被修改
    print(mysql2.count('m'))#统计次数
    print(mysql2.index('pei'))#下标位置

查看执行结果:

0
2

3、切片

元组的切片与列表切片类似,用:进行分割

  1.  
  1.  
  1. b=('111','222','333','444')
    print(b[0:5:2])

查看执行结果:

('111', '333')

我们来做个小程序:

如果列表中的数除2取余数不为0的,则从列表中删除:

  1. li=[1,1,2,3,4,5,6,7,8,9]
  1. for i in li:
    if i%2!=0:
    li.remove(i)
    print(li)

运行以上程序,查看结果:

[1, 2, 4, 6, 8]

我们看到以上程序【1】没有被删除,那是因为我们直接修改了列表,进行了删除操作,当遇到第一个1时,进行了删除,列表变为[1,2,3,4,5,6,7,8,9],此时循环的角标变为1,取到的是2,略过了[1];

所以循环list的时候不能删除列表中的数据,角标会进行变化;

这个时候我们就需要拷贝一份新的列表进行循环:

  1. li=[1,1,2,3,4,5,6,7,8,9]
    li2=li[:]#深拷贝,内存地址会变
    li3=li#浅拷贝,内存地址不变
    print(li2)
    print(li3)
    print(id(li))
    print(id(li2))
    print(id(li3))
    for i in li2:
    if i%2!=0:
    li.remove(i)
    print(li)

查看执行结果:
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
13995656
13967944
13995656
[2, 4, 6, 8]

我们看到了,通过切片拷贝的内容和直接赋值的内容是一样的,但地址是不一样的。

我们叫做深拷贝和浅拷贝,深拷贝的时候删除原有列表的数据,不影响拷贝的列表。

字符串方法

下面列举字符串常用的方法

  1.  
  1. name=' {a} besttest best '
    name1='a besttest best'
    name2=' a besttest best\n'
    name3='a.txt'
    name4=' A B C D, E F G '
    name5='1234567677'
    print(name.strip())#默认去掉首尾的空格和换行
    print(name)
    print(name1.rstrip('best'))#去掉右边指定的字符
    print(name1.rstrip('t'))#去掉右边指定的字符
    print(name1.lstrip('a'))#去掉左边指定的字符
    print(name2.rstrip())#去掉右边的空格和换行
    print(name2)
    print(name.count('e'))#计数
    print(name.index('a'))#查找角标
    print(name.replace('e','E'))#替换
    print(name.format(a='test'))#格式化
    print(name1.capitalize())#首字母大写
    print(name1.center(30,'$'))#居中
    print(name3.endswith('t'))#判断是以什么结尾的
    print(name3.startswith('e'))#判断是以什么开头的
    print(name1.expandtabs(16))
    print(name1.find('w'))#找不到的时候会返回-1
    print(name1.index('b'))#找不到的时候会报错
    print(name1.upper())#把所有的小写字母变大写
    print(name4.lower())#把所有的大写字母变小写
    f={'name':'wang','age':13}
    d='{name}欢迎,his age is {age}'
    print(d.format_map(f))#字符串格式化,传进去的是字典
    print(name.isdigit())#判断是否是数字
    print(name.islower())#判断是否全是小写
    print(name.isupper())#判断是否全是大写
    print(name5.isalnum())#判断是否全是数字
    print(name5.isalpha())#判断是否全是字母
    print(name4.split())#分个字符串,默认以空格进行分割
    print(name4.split(','))#以指定符号分割字符串
    list=['a','b','c','d','e']
    print('$'.join(list))#以指定字符链接列表中的字符串
    s='asdasd asdasd asd asd asdasd a'
    print('0'.join(s))#链接字符串的的元素
    list2=['a','b','c','d',1,2,3,4,5]
    #print('*'.join(list2))#int类型的不能进行拼接
  1. 大家可以自己试一下~
  2.  
  3. 文件读写
  1. ##################################################
    #文件读写
    #读 r 打开文件没有指定模式,那么默认是读;r权限不能进行写文件操作,r+模式是读写模式,会追加写入的内容;r,r+文件不存在的时候会报错
    #写 w w模式会清空原文件,w只能写,不能读; w+ 写读模式,会清空文件内容
    #追加 a a+追加读写都可以,文件不存在的时候,会创建文件
  2.  
  3. file=open('test3','a+')#报GDK的错误,添加utf-8,打开文件
    # file.write('hehe呵呵\n')
    # print(file.readlines())#读取文件的所有内容,并把内容写成list格式
    # file.seek(0)#读操作以后,指针位置在末尾,再读就不会读出来
    # print(file.readline())#读一行
    st=['a','b','c','d']
    #file.write(st)#write不能写入list,只能写入字符串
    file.writelines(st)#写入一个可迭代的元素
    file.seek(0)
    #print(file.readlines())#
    print(file.read())#已经读过一次,会自动识别已经读过的数据
    # for i in file:
    # print(i)
    file.close()#关闭文件
  1.  
  2. #####################################################3
    #高效读文件的方法
    #
    fw=open('test2',encoding='utf-8')
    count=1
    for f in fw:
    f=f.strip()
    stu_lst=f.split(',')
    print(stu_lst)
    #直接循环文件对象的话,循环文件里面的每一行
  3.  
  4. # fw.close()

python自动化测试学习笔记-2-字典、元组、字符串方法的更多相关文章

  1. python自动化测试学习笔记-4内置函数,处理json

    函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...

  2. JavaScript学习笔记(1)字符串方法

    字符串方法 length 属性返回字符串的长度 var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln = txt.length; inde ...

  3. python自动化测试学习笔记-1

    一.什么是自动化 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程.直白的就是为了节省人力.时间或硬件资源,提高测试效率,便引入了通过软件或程序自动化执行测试用例进行测试: 二.python ...

  4. python自动化测试学习笔记-10YAML

    之前学习的编写测试用例的方法,都是从excel中编写接口的测试用例,然后通过读取excel文件进行接口自动化测试,这种方式我们叫做数据驱动的方式,由于excel操作起来不灵活,无法实现关联关系的接口测 ...

  5. python自动化测试学习笔记-5常用模块

    上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...

  6. python自动化测试学习笔记-9测试框架

    学习了这么久的python,我们已经可以自己搭建一个简单的测试和框架了,先从简单的开始,有时我们编写接口的测试用例会用excel进行编写,以下面的接口测试用例模板为例,进行编写:

  7. python自动化测试学习笔记-6urllib模块&request模块

    python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capat ...

  8. python自动化测试学习笔记-4常用模块

    常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...

  9. python基础学习笔记——列表及元组

    列表 列表的介绍  列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 列表的索引和切片 列表和字符串一样也拥有索引: lst = ['刘德华','周润发','周杰伦','向华强 ...

随机推荐

  1. vue中axios设置

    //设置默认全局baseURL axios.defaults.baseURL=process.env.BASE_API; //设置默认全局携带浏览器cookie axios.defaults.with ...

  2. Python随笔day03

    温故知新: 注释: 单行注释   # 多行注释   ‘’’ ‘’’  或者  “””  “”” 注意:三个单引号或双引号可以用于表示多行字符串. 判断输入的字符串是否是数字 salary = inpu ...

  3. DemoKit编译过程错误

    1.编译出错: 2.原因(将代码注释):

  4. 3.1.1 简单的 grep

        grep 最简单的用法就是使用固定字符串:           [many@avention Desktop]$ who         many     :0           2019- ...

  5. 手写DAO框架(三)-数据库连接

    -------前篇:手写DAO框架(二)-开发前的最后准备--------- 前言 上一篇主要是温习了一下基础知识,然后将整个项目按照模块进行了划分.因为是个人项目,一个人开发,本人采用了自底向上的开 ...

  6. 阿里云服务器Ubuntu 16.04 3安装mysql

    .更新系统 apt-get update [注意:要在root用户下] .安装mysql-server apt-get install mysql-serverapt-get install mysq ...

  7. @Value取值为NULL的解决方案------https://blog.csdn.net/zzmlake/article/details/54946346

    @Value取值为NULL的解决方案 https://blog.csdn.net/zzmlake/article/details/54946346

  8. RabbitMQ-rabbitmqctl多机多节点和单机多节点集群搭建(五)

    准备 1.准备3台物理机 我这里通过本地机和2台虚拟模拟我是mac通过(Parallel Desktop 实现) 2.按照签名的liux安装步骤在3台机器都安装rabiitMq 3.将任意一节点的co ...

  9. CodeForces 220B(B. Little Elephant and Array)

    http://codeforces.com/contest/220/problem/B 题意:给出一个数组,给出m组询问,问区间中出现a[i] 次的有多少个. sl: 很显然的离线问题了. 大视野菜花 ...

  10. sheepdog简介

    1.corosync,single ring最多支持50个节点:zookeeper,500个节点可稳定支撑,1000-1500个节点挑战比较大,需要优化消息传递机制. 2.sheepdog一开始为分布 ...