Python代码实用小片段:按频率取字典中的key值,使用装饰器统计函数的调用次数

1.按频率取字典中的key值

import random
def sample(data_dict):
    """
    in: {"A":135,"B":200} / {24.0: 21984, 48.0: 2716}
    out: A/B
    """
    values = sum(data_dict.values())
    prob = [round(i/values,4)for i in data_dict.values()]
    keys = list(data_dict.keys())

    x=random.uniform(0,1)
    probability=0.0
    for item,item_probability in zip(keys,prob):
        probability+=item_probability
        if x < probability: break
    return item

smp = sample({24.0: 21984, 48.0: 2716})
print(smp) # 24.0
smp = sample({"A":135,"B":200})
print(smp) # B
smp = sample({'Homo sapiens': 20162, 'Mus musculus': 1915, 'Macaca fascicularis': 656})
print(smp) # Homo sapiens

2.使用装饰器统计函数的调用次数

import random

def call_counter(func):
    def wrapper(*args, **kwargs):
        wrapper.classes.append(args)
        return func(*args, **kwargs)
    wrapper.classes = []
    return wrapper

@call_counter
def sample(data_dict):
    """
    in: {"A":135,"B":200} / {24.0: 21984, 48.0: 2716}
    out: A/B
    """
    values = sum(data_dict.values())
    prob = [round(i/values,4)for i in data_dict.values()]
    keys = list(data_dict.keys())

    x=random.uniform(0,1)
    probability=0.0
    for item,item_probability in zip(keys,prob):
        probability+=item_probability
        if x < probability: break
    return item

smp = sample({24.0: 21984, 48.0: 2716})
print(smp) # 24.0
smp = sample({"A":135,"B":200})
print(smp) # B
smp = sample({'Homo sapiens': 20162, 'Mus musculus': 1915, 'Macaca fascicularis': 656})
print(smp) # Homo sapiens

print(f"函数调用了{len(sample.classes)}次")

3.合理的运用sum可以替换旧xml值到新xml
比如:需要将旧xml中的一行值替换成新的xml中的一行值。就像项目在不断更新,xml中新的一列值必定有新增的,新的需要又要要旧序列的值。因此可以利用变量的映射,将新旧序列的值映射到每个变量中,并用字典新旧保存变量的长度和值,就可以利用sum更新位置,从而替换新序列的值。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值