《Python极简讲义》Jupyter实操笔记_lesson03

from collections import OrderedDict
od=OrderedDict()
od['a']=1
od['c']=2
od['b']=3
print(od)
OrderedDict([('a', 1), ('c', 2), ('b', 3)])
list(od.keys())
['a', 'c', 'b']
#OrderedDict中,update()方法,把新字典加入老字典,并使用zip()函数,一一配对

keys=['apple','banana','orange']
values=[4,5,6]
od.update(zip(keys,values))
print(od)
OrderedDict([('a', 1), ('c', 2), ('b', 3), ('apple', 4), ('banana', 5), ('orange', 6)])
#OrderedDict中,pop(),move_to_end()方法

od.pop('a')  #将键为'a'的元素删除,并返回对应值
1
print(od)#验证'a'键值对被删除
OrderedDict([('c', 2), ('b', 3), ('apple', 4), ('banana', 5), ('orange', 6)])
od.move_to_end('b')#使用move_to_end()方法,把该键值对移到字典末尾
print(od)
OrderedDict([('c', 2), ('apple', 4), ('banana', 5), ('orange', 6), ('b', 3)])
#3.5.1.4 defaultdict,字典引用时,如果键不存在,抛出异常KeyError;希望键不存在时,能返回一个默认值,就使用defaultdict
from collections import defaultdict
dic0=defaultdict(lambda:'N/A') #匿名函数lambda来设置默认值。
dic0['key1']=1
dic0['key1']
1
dic0['key2']#key2不存在,返回默认值N/A
'N/A'
# 3.5.1.5 Counter 计算器,是collections包中提供的一个简易计数器类。
#示例:统计字典中,一个键出现的次数,并把对应次数作为该键的值

#老方法1,利用循环,
list1=['a','b','d','a','a','d','c','e','d','a','f','e']
list1_count={
     }
for i in list1:
    if i not in list1_count:#如果i是字典里的新键,同样效果的语句:if list1_count.get(i)==None:
        list1_count[i]=1
    else:
        list1_count[i]+=1
print(list1_count)
{'a': 4, 'b': 1, 'd': 3, 'c': 1, 'e': 2, 'f': 1}
#方法2,利用Counter来实现,统计词频
from collections import Counter
list2=['a','b','d','a','a','d','c','e','d','a','f','e']
a=Counter(list2)#调用Counter 类
print(a)
print(dict(a))#把统计结果变成字典,并打印
Counter({'a': 4, 'd': 3, 'e': 2, 'b': 1, 'c': 1, 'f': 1})
{'a': 4, 'b': 1, 'd': 3, 'c': 1, 'e': 2, 'f': 1}
#Counter类中的most_common(n) 方法,是最常用的,n表示某个数字,它表示出现频率最高的n个对象,以列表内嵌元组的形式出现

print(a.most_common(2))
[('a', 4), ('d', 3)]
a.most_common(1)[0][1]#取出最高频次的元素的数量
4
#3.5.2 datetime模块
from datetime import datetime #datetime模块的同名datetime类
time=datetime.now()
print(time)
2020-09-17 16:09:17.750805
type(time)#验证time对象的身份
datetime.datetime
from datetime import datetime
date=datetime(2020,12,31,10,59)#用datetime的构造方法来生成日期时间对象
print(date)
2020-12-31 10:59:00
#利用datetime类的属性year,month,day,hour,minute,
date.year
2020
date.month
12
date.day
31
date.hour
10
date.minute
59
#3.5.2.2 datetime转换为timestamp,时间戳,时间戳是相对于计算机设定的纪元元年的整数,1970年1月1日为元年
#查看时间戳
from datetime import datetime
dt=datetime.now()
dt.timestamp()

1600330584.88398
#把用户输入的字符串类型的时间,格式转化为datetime,利用datetime.strptime()实现
from datetime import datetime
oneday=datetime.strptime('2020-10-30 11:00:30','%Y-%m-%d %H:%M:%S')
print(oneday)
2020-10-30 11:00:30
#datetime转换为字符串,利用strftime()实现

from datetime import time
time=datetime.now()
time.strftime('%Y')

'2020'
#3.5.2.4 datetime加减 ,计算日期和时间的差值,需要引入时间差类 timedelta

from datetime import datetime
present=datetime.now()
birth=datetime(1994,3,29,16,45)
age=present-birth
print(age)

9668 days, 23:43:12.117464
#示例,现实问题里,计算两个日期之间的相隔的天数

from datetime import datetime,timedelta

list1=['2020-10-20','1988-01-27']
day1=datetime.strptime(list1[0],'%Y-%m-%d') #字符串转换为datetime对象
day2=datetime.strptime(list1[1],'%Y-%m-%d')

gap=day1-day2 #时间差timedelta对象
print(gap.days)
11955
#3.5.3 json模块
#3.5.3.1 dumps与loads
# json.dumps():将Python对象序列化(即编码)为JSON格式的字符串。
# json.loads():将JSON格式的字符串反序列化(即解码)为Python对象

import json
data={
     'name':'ACME','shares':100,'price':542.23}
json_str=json.dumps(data) #将字典data序列化为JSON对象,JSON对象在本质上就是字符串
print(json_str)
{"name": "ACME", "shares": 100, "price": 542.23}
data1=json.loads(json_str)#反序列化
print(data1)
{'name': 'ACME', 'shares': 100, 'price': 542.23}
type(data)
dict
type(data1)
dict
#3.5.3.2 dump与load
#如果我们要处理的是文件,而不是字符串,可以用json.dump()和json.load()来编码和解码JSON数据

import json
data2=[{
     'a':1,'b':2,'c':3,'d':4}]

with open('data.json','w') as f:#将数据保存在json文件中
    json.dump(data2,f)
    
data3=[{
     'May':50,'Jane':60,'July':65,'August':78,'September':80}]
with open('data3.json','w') as m:
    json.dump(data3,m)
#将数据从json文件中读取出来
with open('data3.json','r') as n:
    data4=json.load(n)#将json文件读取,并赋值给data4
print(data4)
[{'May': 50, 'Jane': 60, 'July': 65, 'August': 78, 'September': 80}]
#3.5.4 random模块
#random()同名方法
#生成0~1之间的随机浮点数
import random
num=random.random() #调用random模块的random方法,返回[1,0)区间的随机数
print(num)
0.6841113691590242
#3.5.4.2 uniform()
#返回指定区间的随机数
import random
random.uniform(10,50)#生成[10,50]之间的随机数
29.48766674134876
#利用?查询
random.uniform?
# 输出结果:
# Signature: random.uniform(a, b)
# Docstring: Get a random number in the range [a, b) or [a, b] depending on rounding.
# File:      /opt/anaconda3/lib/python3.8/random.py
# Type:      method
#3.5.4.3 产生随机整数
random.randint(10,50)#生成[10,50]之间的随机整数
37
#3.5.4.4 randrange()
for i in range(1,10,2):#已有知识,range()结合for 循环,生成等差数列
    print(i,end=',')
1,3,5,7,9,
import random
random.randrange(1,10,2)#就是从range(1,10,2)生成的等差数列中,随机挑选一个数
5
#3.5.4.5 choice() 从众多元素里随机选一个,元素类型可能包括数值,列表,元组,字典
list=['a','b','c']
import random
random.choice(list)

'b'
# choice() 方法的语法:

# import random

# random.choice( seq  )
# 注意:choice()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。

# 参数
# seq -- 可以是一个列表,元组或字符串。
random.choice?
#3.5.4.6 choices()
#一次性随机挑选多个元素
from random import choices
mylover=[33,44,55,66]
choices(mylover,k=2)  #k参数定义挑选的个数,注意挑选的元素是可能是重复,采用“放回采样法”
[55, 55]
#3.5.4.7 sample()
#一次性抽取,多个不重复的元素
from random import sample
enemy=[99,88,77]
sample(enemy,2)
[77, 88]
#3.5.4.8 shuffle()
#对序列的所有元素进行打乱排序
from random import shuffle
lst=['nancy','amy','hebe','lily','sylvia']
shuffle(lst)#重新洗牌
print(lst)
['hebe', 'sylvia', 'lily', 'nancy', 'amy']

你可能感兴趣的:(Python极简讲义,python,大数据)