如何获取字典内列表指定索引最大值对应的键,无需转换pandas dataframe
解决方案
核心思路是直接在原生字典结构上遍历查询,不需要做pandas转换,内存开销和执行效率都能满足大数据量的处理需求。
1. 全索引批量查询实现
如果需要获取所有索引位置对应的最大值key,用以下通用函数:
def get_max_key_per_index(input_dict): keys = list(input_dict.keys()) # 取第一个key的列表长度作为全局长度,默认所有value列表长度一致 list_length = len(input_dict[keys[0]]) result = [] for idx in range(list_length): max_val = -float('inf') max_key = None # 遍历所有key,对比当前索引位置的取值 for k in keys: current_val = input_dict[k][idx] if current_val > max_val: max_val = current_val max_key = k result.append(max_key) return result
用你提供的示例字典调用该函数,返回结果为['NN', 'DT', 'DT', 'CC', 'DT', 'DT', 'DT', 'DT'],和你示例中的特征完全匹配:
- 第1个位置(Python原生索引为0)最大值对应key为
NN - 第4个位置(Python原生索引为3)最大值对应key为
CC
注:Python默认索引从0开始计数,如果你使用的是从1开始的自然计数,对应取值时做+1/-1的偏移即可。
2. 单指定索引查询实现
如果只需要查询个别指定索引的结果,不需要全量遍历,用以下更高效的实现:
def get_max_key_for_target_index(input_dict, target_idx): max_val = -float('inf') max_key = None for k, val_list in input_dict.items(): current_val = val_list[target_idx] if current_val > max_val: max_val = current_val max_key = k return max_key
适配你现有代码的写法
可以直接把函数嵌入你已有的代码片段中使用:
for i in range(len(test)): list1 = [[0 for x in range(len(test[i]))] for y in range(len(pos_list))] q = dict(zip(pos_list, list1)) for j in range(len(test[i])): # 直接获取当前j索引对应的最大值key,后续接你自己的业务逻辑即可 current_max_key = get_max_key_for_target_index(q, j)
内容的提问来源于stack exchange,提问作者bloomsdayforever
相关产品推荐
相关产品推荐

