python一些技巧函数

266 阅读1分钟
  1. 统计词频,计算词频Top(n)
from collections import Counter

words=['张三','张三','李四','张三','王五','王二麻子','Tom','Tom','林书']

word_count=Counter(words)

top_10=word_count.most_common(10)

print(top_10)

  1. 对一个序列去重,去重后原顺序不变 如果用set来去冲,去重后的顺序就变了,所以不能用set

def dulpi(items,key=None):
    seen=set()
    for item in items:
        val=item if key is None else key(item)
        if val not in seen:
            yield item
            seen.add(val)

if __name__=='__main__':
    a=[1,2,9,2,2,3,4,5,5,6,7,3,0]
    
    b=[{'a':1,'b':1},{'a':2,'b':3},{'a':4,'b':1},{'a':1,'b':1}]
    
    print(list(dulpi(a)))
    
    m=dulpi(b,key=lambda x:(x['a'],x['b']))
    print(list(m))
    

注意,如果传入的序列是字典,那么key就不能为None,此时的key是个函数,这个函数的入参是一个字典,返回一个通过key提取值后组成的元祖,类似于

def default_key(x):
    return (x['a'],x['b'])

真正调用是在val=item if key is None else key(item)这一句的else后

  1. 两个字典之间的操作
x={'a':1,'b':2,'c':3}
y={'b':3,'c':4,'d':4}

# key相同的
a=x.keys() & y.keys()
print(a)

# key-value相同的
b=x.items() & y.items()
print(b)

# key不同的
print(x.keys()-y.keys())

# key-value不同的
print(x.items()-y.items())


  1. 求字典的最大、最小值
items={
    'a':67,
    'b':78,
    'c':21,
    'd':56,
    'e':45,
    'f':90
}
# 最大值
print(max(zip(items.values(),items.keys())))
# 最小值
print(min(zip(items.values(),items.keys())))

# 排序
print(sorted(zip(items.values(),items.keys()),reverse=True))

  1. 获取序列中元素的一种方法
a=[1,2,3,4,5,6,7,8,9]

head,*middle,tail=a