Python3中dict.keys()和dict_values转换成list类型及访问操作

前期回顾

python collections模块中的Counter、OrderedDict、namedtuple、ChainMap、deque


问题引入

在学习完python 中的 collections模块后,我们会遇到如何访问内部某一具体元素的问题,查找网上没有相关博文,故解决此问题。


代码解决
from collections import Counter
s = "aaabcccdeff"
temp = Counter(s)
print(temp)           # Counter({'a': 3, 'c': 3, 'f': 2, 'b': 1, 'd': 1, 'e': 1})
print(type(temp))     # <class 'collections.Counter'>

print(temp.items())   # dict_items([('a', 3), ('b', 1), ('c', 3), ('d', 1), ('e', 1), ('f', 2)])
print(temp.keys())    # dict_keys(['a', 'b', 'c', 'd', 'e', 'f'])
print(temp.values())  # dict_values([3, 1, 3, 1, 1, 2])

# dict.keys()转换成list类型
print(list(temp.keys()))        # ['a', 'b', 'c', 'd', 'e', 'f']
# dict_values转化为list类型
print(list(temp.values())[:])   # [3, 1, 3, 1, 1, 2]

之后的访问就很简单了 :)

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
```python def merge_accumulate_client_update(self, list_num_proc, list_state_dict, lr): total_num_proc = sum(list_num_proc) # merged_state_dict = dict() dict_keys = list_state_dict[0].keys() # Check if all state dicts have the same keys for state_dict in list_state_dict[1:]: assert state_dict.keys() == dict_keys # accumulate extra sgrad and remove from state_dict if self.use_adaptive and self.is_adj_round(): prefix = "extra." for state_dict in list_state_dict: del_list = [] for key, param in state_dict.items(): # Check if the key starts with 'extra.' if key[:len(prefix)] == prefix: # Get the corresponding sgrad key sgrad_key = key[len(prefix):] # Create a mask of zeroes mask_0 = self.model.get_mask_by_name(sgrad_key) == 0. # Create a dense tensor and fill it with values from param based on the mask dense_sgrad = torch.zeros_like(mask_0, dtype=torch.float) dense_sgrad.masked_scatter_(mask_0, param) # Accumulate the dense sgrad without dividing by lr self.control.accumulate(sgrad_key, dense_sgrad) # Add the key to the delete list del_list.append(key) # Remove the keys from the state_dict for del_key in del_list: del state_dict[del_key] ``` 这段代码实现了一个`merge_accumulate_client_update`方法,主要功能是合并和累加`list_state_dict`的状态字典。以下是对代码的注释: - `total_num_proc`:所有进程数的总和。 - `dict_keys`:状态字典的键列表。 - 检查所有状态字典是否具有相同的键。 - 如果使用自适应且处于调整轮次,则累加额外的`sgrad`并从状态字典删除。 - `prefix`:额外`sgrad`的前缀。 - 对于每个状态字典,遍历键和参数。 - 如果键以`prefix`开头,则获取相应的`sgrad`键。 - 创建一个零填充的掩码。 - 创建一个稠密张量,并根据掩码从参数填充值。 - 累加不除以`lr`的稠密`sgrad`。 - 将键添加到删除列表。 - 从状态字典删除键。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值