字典:key-value形式

  1)取数据方便   #字典里面没有重复的key

  2)查询速度快

#字典是无序的

一、定义一个字典

infos = {
'name':'王小明',
'sex':'male',
'addr':'北京',
'age':'' #最后没逗号
}
print(infos.get('name')) #>>> 王小明

二、字典的方法:

  1)查:

  字典的取值:有两种方法

①print(infos.get('name'))  #如果key不存在,返回None

  print(infos.get('name',404)) #如果key不存在,返回定义的404

②print(infos['sex'])    #如果key不存在会报错

  2)增:三种增加的方式

①infos['phone']=15866661111   #增加一个key-v
②infos.setdefault('money','100w') #增加一个k-v
print(infos)

这两方式的区别:key存在时,都能增加,但是

infos['phone']=15866661112     #如果key存在时,会修改原来的value
infos.setdefault('name','张晓') #如果key存在时,不会修改原来的值
print(infos)

将一个变量加入字典:

users.setdefault(username,pwd)  #方式一
users[username]=pwd #方式二

合并两个字典:a.update(b)

a = {'a':''}
b = {'b':''}
a.update(b) #如果b字典的key与a中的key相同,b会更新a的value
print(a) >>> {'a': '', 'b': ''}

  2)修改:一种方式

infos['name']= '小胖'

  3)删:

infos.pop('age')  #指定key来删除
infos.popitem() #随机删除一个key(用处不大)
del infos['phone'] #指定key来删除
infos.clear() #清空字典
print(infos)

三、字典里常用的三个内置方法:

print(d.values())  #获取字典所有的value
print(d.keys()) #获取字典所有的key
print(d.items()) #获取字典所有的k-v

四、【字典举例】

people = {
'田雨':{
'age':18,
'money':200000,
'clothes':'100套',
'hzp':'n多',
'shoes':['nike','addis','lv','chanle']
},
'张三':{
'金库':'2000w',
'house':['三环一套','4环2套'],
'cars': {
'japan':['普拉多','兰德酷路泽'],
'usa':['林肯','凯迪拉克','福特'],
'china':['五菱宏光','qq','红旗']
}
}
}
people['张三']['cars']['usa'].append('牧马人') # people['田雨']['shoes'].append('匡威') #
# print(people)
# people['田雨']['money'] = people['田雨']['money']+200
# people['田雨']['money'] += 200
# print(people)

五、字典的循环:

1)直接循环字典的话,只取到字典的key

for p in people:
print(p)

  >>>张三

     田雨

2)循环的时候,同时取字典的key和value

for k,v in people.items():
print(k,'--->',v)

输出:

田雨 ---> {'age': 18, 'clothes': '100套', 'hzp': 'n多', 'shoes': ['nike', 'addis', 'lv', 'chanle'], 'money': 200000}
张三 ---> {'cars': {'china': ['五菱宏光', 'qq', '红旗'], 'japan': ['普拉多', '兰德酷路泽'], 'usa': ['林肯', '凯迪拉克', '福特', '牧马人']}, '金库': '2000w', 'house': ['三环一套', '4环2套']}

3)字典里面用in来判断某个值是否存在话,只是判断key是否存在

if 'key1' in users: #存在返回True,不存在返回False
print('xxx')

六、【字典练习二】:注册-字典

#注册:验证用户名是否已存在,将新注册的用户名和密码加入到字典
users = {
'zhangsan':'',
'wangwu':'',
}
for i in range(3): #限制错误3次
username = input('账号:').strip()
passwd = input('密码:').strip()
cpasswd = input('密码确定:').strip()
if username=='' or passwd=='' or cpasswd=='':
print('用户名/密码不能为空')
elif username in users:
print('用户名已经被注册!')
elif passwd!=cpasswd:
print('两次输入的密码不一致')
else:
print('恭喜,注册成功!')
# users.setdefault(username,passwd)
users[username]=passwd #注册成功,将key和value加入users的字典
break #
else:
print('错误次数过多')
print(users)

七、【字典练习三】:

#写一个录入学生作业情况的一个程序:
#1、查看学生作业情况 ,输入用户名 #choice=1
#存在的话,print
#不存在的话
#2、录入学生作业情况(姓名、日期、已交/未交) #choice=2
#3、录入的情况允许输入3次,需要验证为空的情况
#判断choice不存在的情况 homeworks = {
'张流量':{'2018.3.22':"未交",'2018.3.23':'wei交'},
'田雨':{'2018.3.22':"未交",'2018.3.23':'wei交'},
} choice = input("请输入您的选择 1:查看学生作业情况 2:录入学生作业情况:")
if choice == '':
for x in range(3):
name = input("请输入您要查看的学生的姓名:").strip()
if name in homeworks:
print("%s:%s" %(name,homeworks[name]))
break
elif name=='':
print("姓名不能为空")
else:
print("没有找到此学生信息")
else:
print("查询次数过多,请稍后再试")
elif choice == '':
for i in range(3):
username = input("请输入需要录入的学生的姓名:").strip()
date = input("请输入需要录入的日期:").strip()
status = input("请输入'已交'或'未交':").strip()
if username=='' or date=='' or status=='':
print("录入的信息不完整")
elif username in homeworks:
homeworks[username][date] = status #姓名+ 时间相同时,不报错,可更新原来已录入的状态,效果和update一样
#homeworks[username].setdefault(date,status) #姓名+ 时间相同时,不报错,但是状态不能更新
#homeworks[username].update({date:status})
print("您录入后此学生的信息更新为,%s:%s" % (username, homeworks[username]))
break
else:
homeworks[username] = {date:status} #k-v的形式
print("您录入学生的信息为,%s:%s" % (username,homeworks[username]))
break
else:
print("输入错误次数过多")
else:
print("输入错误,请输入1或2") print("已录入的全部信息:%s" % homeworks)       

集合:

一、集合的定义

定义空集合:s = set()

定义集合:s = {1,3,5,7}  #注意与字典区分

d = {'k':'v'}  #字典

集合天生就能去重(集合中没有重复的元素),集合也是无序的

s = set('')  #字符串/list可以强制转换为集合
print(s) >>> {'', '', '', ''} #去除了重复的元素

二、集合的交集、并集、差集

1)取交集:取两个集合都有的元素

s2 = set('')
s3 = {'', '', '', '', ''}
print(s2 & s3) #取交集的第一种方式
print(s3.intersection(s2)) #取交集第二种方式 >>> {'', '', '', ''}
{'', '', '', ''}

2)取并集:两个集合合并到一起,并去重

print(s2 | s3)     #方式一
print(s2.union(s3)) #方式二

3)取差集:去掉set3

print(s2-s3)
print(s2.difference(s3)

4)对称差集:保留两集合都没有的,去掉都有的

print(s2 ^ s3)
print(s4.symmetric_difference(s5))

三、集合的方法:

增、删、改、判断交集

s.add('ss')    #加元素
s.pop() #随机删除
s.remove('ss') #删除某个元素
s.update({1,2,3}) #把另一个集合加进去 s.isdisjoin(s1) #两个集合没有交集返回True,有交集返回False
                                                     
张三

python学习笔记(三)- 字典、集合的更多相关文章

  1. python学习笔记(三)---字典

    字典 在Python中,字典 字典 是一系列键 键-值对 值对 .每个键 键 都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将 任何Py ...

  2. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  3. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  4. python学习笔记三--字典

    一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...

  5. python学习笔记(三)、字典

    字典是一种映射类型的数据类型.辣么什么是映射呢?如果看过<数据结构与算法>这一本书的小伙伴应该有印象(我也只是大学学习过,嘻嘻). 映射:就是将两个集合一 一对应起来,通过集合a的值,集合 ...

  6. python学习笔记(三)-列表&字典

    列表: 一.列表操作"""Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.比如,列出班里所有同学的名字,就可以用一 ...

  7. Python学习笔记四--字典与集合

    字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...

  8. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  9. python学习笔记三--字典的使用

    一.基本使用: 1. 赋值:{key:value} 1.1 与列表相同处:会改变索引(键)相关联的值的改变 1.2 与列表不同处:不用考虑值的长度,而列表是有序的需要考虑末尾偏移量,超过末尾偏移量的会 ...

  10. Python学习笔记004_字典_集合

    >>> # 字典 用大括号表示, 它是影射类型,相当于java中的Map >>> >>> dict1 = {'李宁': '一切皆有可能', '耐克 ...

随机推荐

  1. Spark访问Hive表

    知识点1:Spark访问HIVE上面的数据 配置注意点:. 1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你${spark_home}/lib中(sp ...

  2. 2018.4.28 kvm虚拟机管理

    创建虚拟机: virt-install --name wj-v1.4.1.0411 --vcpus=2 --memory=2048 --disk path=/home/wj/os/osgwV1.4.1 ...

  3. python要开始记录了20181125

    print('1.使用while循环输入 1 2 3 4 5 6 8 9 10') i = 1 while i < 10: i += 1 if i == 7: continue #print(' ...

  4. zombodb 数据类型映射

    zombodb 与es 数据类型的映射处理 通用数据类型映射 Postgres 类型 Elasticsearch JSON 映射定义 bytea {"type": "bi ...

  5. Java_集合面试题

    Java_集合面试题 0.链表,队列和栈的区别? 链表是一种存储结构,指得是存储时候除了要存储数据元素之外,还要用数据元素一起的另外空间存储数据元素的关系. 队列和栈都是线性表,属于逻辑结构范畴,都是 ...

  6. linux下C语言多线程编程实例

    用一个实例.来学习linux下C语言多线程编程实例. 代码目的:通过创建两个线程来实现对一个数的递加.代码: //包含的头文件 #include <pthread.h> #include ...

  7. Python 语言之 map/reduce

    1.相关文献 大名鼎鼎的Google论文<MapReduce: Simplified Data Processing on Large Clusters> 对应的中文翻译<MapRe ...

  8. 读完这个我懂了JNDI

    转载自:http://私塾在线/forum/blogPost/list/1186.html NDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory I ...

  9. 微信小程序如何设置服务器配置

    最近微信小程序在it界火了起来,公司也要求我们开始接触微信小程序,废话不多说直接从配置微信小程序开始 1,首先,登录 https://mp.weixin.qq.com,(这里默认你已经获取到微信小程序 ...

  10. 【比赛打分展示双屏管理系统-专业版】Other.ini 配置文件解读以及排行榜界面及专家评语提交展示等具体配置

    第一个问题:Other.ini配置文件的解读: 在软件根目录下,找到Other.ini配置文件,打开如下: 配置文件解读: iOrderIDOrXSID:默认为0,按照软件 选项/排行榜和奖项 的设置 ...