又是统计
Counter 是dict的一个子类
# 可以统计字符串,字典,列表,元祖,等可迭代对象
from collections import Counter
users = ["jing", "jing2", "jing3", "jing4","jing", "jing2","jing", "jing2",]
user_counter = Counter(users)
print(user_counter)
user_co = Counter("adsgadskjgalhklsahdk")
user_co.update("alkdlfdni") #这里的update 是 把上面的user_co 和下面的user_co 一起做的统计
print(user_co)
user_co = Counter("adsgadskjgalhklsahdk")
user_co2 = Counter("iagudiewquj")
user_co.update(user_co2)
print(user_co)
# 统计出来出现次数最多的前n个元素
# 这里统计出来前两个
# top n 堆(数据结构)
user = Counter("qwertyuiop[asdfghjklz")
print(user.most_common(2))
from collections import ChainMap
user_dict1 = {"a":"jing1","b":"yue2"} #{"a":"jing1","b":"yue2"} 如果 “b” 出现两次,那么 打印出来的结果只会出来一次,
user_dict2 = {"c":"jing2", "d":"yue3"}
new_dict = ChainMap(user_dict1,user_dict2) #合并
new_dict.new_child({"aa":"bb" })
print(new_dict.new_child({"aa":"bb" })) #新增 (这里是copy)
print(new_dict.maps) #把字段转换为列表
new_dict.maps[0]["a"]="jingda" #这里不是copy
for key,value in new_dict.items():
print(key,value)
c2 = Counter("hannaha")
c3 = Counter(['Python', 'Swift', 'Swift', 'Python', 'Kotlin', 'Python'])
c4 = Counter({"red":4,"blue":2})
c5 = Counter(Python=4,Swift=8)
打印结果是:
Counter({'a': 3, 'h': 2, 'n': 2})
Counter({'Python': 3, 'Swift': 2, 'Kotlin': 1})
Counter({'red': 4, 'blue': 2})
Counter({'Swift': 8, 'Python': 4})
每一个元素出现的次数
namedtuple
==============================
写在前面,对于可迭代对象:__iter__,__getitem__
只要实现这里面的其中一个就是可迭代对象
1.tuple的功能
2.拆包
name_tuple = ("name", 26, "男", "上海市")
name,age,sex,city= name_tuple
print(name), print(age),print(sex),print(city)
3.tuple的不可变性
4.tuple比list好的地方
(1):immutable的重要性
(1):性能优化:
(2):线程安全
(3):可以作为dict的key(最重要的一个点)(可哈希)
(4):拆包特性
(2)关于C语言的对比
==============================
2.namedtuple详解
(1): class User:
def __init__(self, name, age);
self.name = name
self.age = age
user = User(name="jing", age=26)
print(user.age,user.name)
这里才是重点
from collections import namedtuple
U = namedtuple("User", ["name", "age", "height"])
# U就相当于一个类,user相当于一个U实例化出来的一个实例对象,其中name,age,height 就是一个个的属性
user = U(name="jing", age=26, height=172)
# U就相当于一个类,user相当于一个U实例化出来的一个实例对象,其中name,age,height 就是一个个的属性
print(user.age, user.name, user.height)
现在有一个实例:
web项目中的user表
把user表的数据全部取出来然后加一个列
如果不用orm,而是用 pymysql,原始方法来取的话,那样取出来的是一个tuple,然后映射成U,
1.
U = namedtuple("User", ["name", "age", "height","edu"])
user_tuple = ("jing",27,175)
user = User(*user_tuple, "master")
print(user.age, user.name,user.height)
2.
U = namedtuple("User", ["name", "age", "height","edu"])
user_dict = (
"name":"jing",
"age":27,
"height":175)
user = User(**user_tuple, edu = "master")
user_info_dict = user._asdict() 将tuple转化为dict
print(user.age, user.name,user.height)
下面这两个函数 介绍*args**kwargs 传参
*args ==>tuple
**kwargs ===>dict
def ack(*args, **kwargs):
pass
ack("jing", 26)
def ack(*args, **kwargs):
pass
ack(name= "jing", age = 26)
defaultdict 是 dict 的子类,因此 defaultdict 也可被当成 dict 来使用,dict 支持的功能,defaultdict 基本都支持。但它与 dict 最大的区别在于,如果程序试图根据不存在的 key 采访问 dict 中对应的 value,则会引发 KeyError 异常;而 defaultdict 则可以提供一个 default_factory 属性,该属性所指定的函数负责为不存在的 key 来生成 value
defaultdict
#统计
from collections import defaultdict
#1
user_dict = {}
users = ["jing", "jing2", "jing3", "jing4","jing", "jing2","jing", "jing2",]
for user in users:
if user not in user_dict:
user_dict[user] = 1
else:
user_dict[user] +=1
print(user_dict)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
from collections import defaultdict
s = [('Python', 1), ('Swift', 2), ('Python', 3), ('Swift', 4), ('Python', 9)]
# 创建defaultdict,设置由list()函数来生成默认值
d = defaultdict(list)
for k, v in s:
# 直接访问defaultdict中指定key对应的value即可。
# 如果该key不存在,defaultdict会自动为该key生成默认值
d[k].append(v)
print(list(d.items()))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
strings = ('puppy', 'kitten', 'puppy', 'puppy',
'weasel', 'puppy', 'kitten', 'puppy')
counts = {}
for kw in strings:
if kw not in counts:
counts[kw] = 1
else:
counts[kw] += 1
# counts:
# {'puppy': 5, 'weasel': 1, 'kitten': 2}
使用setdefault
strings = ('puppy', 'kitten', 'puppy', 'puppy',
'weasel', 'puppy', 'kitten', 'puppy')
counts = {}
for kw in strings:
counts.setdefault(kw, 0)
counts[kw] += 1
dict.setdefault()方法接收两个参数,第一个参数是健的名称,第二个参数是默认值。假如字典中不存在给定的键,则返回参数中提供的默认值;反之,则返回字典中保存的值
#2 2比1 搞笑
#Python字典 setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值
user_dict = {}
users = ["jing", "jing2", "jing3", "jing4","jing", "jing2","jing", "jing2",]
for user in users:
user_dict.setdefault(user, 0)
user_dict[user] +=1
print(user_dict)
#defaultdict 除了dict的功能外,还有一个功能是,如果键不存在,会赋值一个默认的值
# list,int 等可调用对象
# default_dict = defaultdict(list)
# defaultdict中只能传可调用的对象
default_dict = defaultdict(int)
users = ["jing", "jing2", "jing3", "jing4","jing", "jing2","jing", "jing2",]
for user in users:
default_dict[user] +=1
print(default_dict)
网友评论