Datawhale |Python Day3

1. 字典
Python内置了字典,使用键-值(key-value)存储,具有极快的查找速度。主要有以下三个特性:

  • 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一
  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
  • 查找和插入的速度极快,不会随着key的增加而变慢;但需要占用大量的内存,内存浪费多

1.1 基本操作

# 访问
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict['Name']: ", dict['Name']
print "dict['Age']: ", dict['Age']
# 修改
dict['Age'] = 8 # 更新
dict['School'] = "RUNOOB" # 添加
#删除
del dict['Name']  # 删除键是'Name'的条目
dict.clear()      # 清空词典所有条目
del dict          # 删除词典

1.2 遍历

#只对键的遍历
d = {'name1' : 'pythontab', 'name2' : '.', 'name3' : 'com'}
for key in d:
    print (key, ' value : ', d[key])
    
# name1  value :  pythontab
# name2  value :  .
# name3  value :  com
#对键和值都进行遍历
#如果只需要值,用d.values;如果想获取所有的键则可以使用d.keys;如果想获取键和值d.items方法会将键-值对作为元组返回,for循环的一大好处就是可以循环中使用序列解包。
for key, value in d.items():
    print (key, ' value : ', value)
    
# name1  value :  pythontab
# name2  value :  .
# name3  value :  com

2. set集合
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

2.1 创建及集合

#创建
>>> x = set('spam')
>>> y = set(['h','a','m'])
>>> x, y
(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))

>>> x & y # 交集
set(['a', 'm'])

>>> x | y # 并集
set(['a', 'p', 's', 'h', 'm'])

>>> x - y # 差集
set(['p', 's'])

2.2 去除海量列表里重复元素,应用set案例

>>> a = [11,22,33,44,11,22]
>>> b = set(a)
>>> b
set([33, 11, 44, 22])
>>> c = [i for i in b]
>>> c
[33, 11, 44, 22]

2.3 set基本操作

t.add('x')            # 添加一项
s.update([10,37,42])  # 在s中添加多项
t.remove('H')         #删除一项
len(s)                #set s的长度
x in s                #测试 x 是否是 s 的成员
x not in s            #测试 x 是否不是 s 的成员

s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中

s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中

s.union(t)
s | t
返回一个新的 set 包含 s 和 t 中的每一个元素

s.intersection(t)
s & t
返回一个新的 set 包含 s 和 t 中的公共元素

s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s 和 t 中不重复的元素

s.copy()
返回 set “s”的一个浅复制

3. file文件读取
3.1读取文件

打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):

>>> f = open('test.txt', 'r')
#标示符'r'表示读,这样,我们就成功地打开了一个文件

如果文件不存在,open()函数就会抛出一个IOError的错误,如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

>>> f.read()
'Hello, world!'
#read()会一次性读取文件的全部内容
#read(size)每次最多读取size个字节的内容
#readline()可以每次读取一行内容
#readlines()一次读取所有内容并按行返回list

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())

3.2写入文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件

>>>with open('/Users/michael/test.txt', 'w') as f
>>> f.write('Hello, world!')
>>> f.close(

以’w’模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾以传入’a’以追加(append)模式写入。

3.3 Python 操作excel 和csv

需要找时间再学习下《数据科学手册》里Pandas的内容……

4. 作业
读取一个text文件,将文件中转换为字典,key值为学习项目,value值为一个负责人列表,并判断字典中是否有负责人负责多个学习项目。

dict={}
value1 = []
with open('Data/homework.txt', 'r',encoding='UTF-8') as f:    #r是只读 w是写模式
    for line in f.readlines():
        word = line.strip()
        key = word.split(' ')[0]
        value = [word.split(' ')[1], word.split(' ')[2]]
        value1 += value                                        #所有负责人添加进列表
        dict[key] = value 
print("字典排列为:%s"%dict)

print("*"*30)                                                      #分隔符

if len(set(value1)) == len(value1):
    print("每个负责人只负责一个项目")
else:
    print("有负责人负责多个学习项目")

输出结果为:

字典排列为:{'python学习': ['咖喱', '胡骞'], 'leetcode刷题': ['老表', '陈焕森'], 
'编程集训': ['孙超', '小熊'], '统计学': ['李奇峰', '蓝昔'], 
'ML项目实践': ['杨冰楠', '孙涛'], '高级算法梳理': ['于鸿飞', '小雪'],
 '基础算法梳理': ['sm1les', '钱令武'], '知乎小组': ['李严', '黑桃'],
  '学习群': ['咖喱', '排骨']}
******************************
有负责人负责多个学习项目
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值