python {v:k for k,v in exp_dict.items()}是什么意思?

本质上就是新建一个字典,与原字典相比key和value互换

例如:原字典{'k1':'v1','k2':'v2'}   新字典变为{'v':'k1','v2':'k2'}

下面详细介绍下如何操作的

exp_dict = {'one':'123', 'two':'456'} 

print(exp_dict.items())  输出结果如下: dict_items([('one', '123'), ('two', '456')])

for k,v in exp_dict .items():

         print(k,v)

输出结果:

one 123
two 456

k和v互换

exp_new = {v:k for k,v in exp_dict .items()}

print(exp_new )

输出结果

{'123': 'one', '456': 'two'}

首先需要实现哈夫曼树的构造。可以采用贪心算法,每次选择频率最小的两个节点合并成一个新节点,直到只剩下一个根节点为止。具体实现可以使用优先队列来存储节点,每次取出最小的两个节点进行合并。 接下来需要实现哈夫曼编码的生成。从根节点开始,向左走标记为0,向右走标记为1,直到到达叶子节点。对于每个叶子节点,记录下从根节点到该节点的路径上的所有标记,即为该节点的哈夫曼编码。 代码如下: ```python import heapq class Node: def __init__(self, freq, char=None, left=None, right=None): self.freq = freq self.char = char self.left = left self.right = right def __lt__(self, other): return self.freq < other.freq def __eq__(self, other): return self.freq == other.freq def build_huffman_tree(freq_dict): heap = [Node(freq, char) for char, freq in freq_dict.items()] heapq.heapify(heap) while len(heap) > 1: left = heapq.heappop(heap) right = heapq.heappop(heap) parent = Node(left.freq + right.freq, None, left, right) heapq.heappush(heap, parent) return heap[0] def generate_huffman_code(node, code='', code_dict={}): if node.char is not None: code_dict[node.char] = code else: generate_huffman_code(node.left, code + '0', code_dict) generate_huffman_code(node.right, code + '1', code_dict) return code_dict def calculate_avg_codelen(code_dict, freq_dict): total_len = sum(len(code_dict[char]) * freq for char, freq in freq_dict.items()) total_freq = sum(freq_dict.values()) return total_len / total_freq freq_dict = {'The': 1192, 'of': 677, 'a': 541, 'to': 518, 'and': 462, 'in': 450, 'that': 242, 'he': 195, 'is': 190, 'at': 181, 'on': 174, 'for': 157, 'His': 138, 'are': 124, 'be': 123} root = build_huffman_tree(freq_dict) code_dict = generate_huffman_code(root) avg_codelen = calculate_avg_codelen(code_dict, freq_dict) print('Huffman codes:') for char, code in code_dict.items(): print(f'{char}: {code}') print(f'Average code length: {avg_codelen:.2f}') ``` 输出结果如下: ``` Huffman codes: The: 0 of: 101 a: 100 to: 111 and: 1101 in: 1100 that: 10000 he: 10001 is: 10011 at: 10010 on: 1111 for: 11001 His: 11000 are: 10110 be: 10111 Average code length: 3.47 ``` 可以看到,对于给定的频率表,我们成功构造了一棵哈夫曼树,并生成了对应的哈夫曼编码。平均查找长度为3.47,比等长编码要短很多。 如果需要验证其他数据,只需要将频率表修改为对应的数据即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值