Skip to main content
 首页 » 编程设计

python之计算字典列表的最小值和最大值以规范化字典值

2025年05月04日14落叶无声

我想计算看起来像这样的字典列表的某些统计数据:

list1 = [{'hello': "world", 'score': 1.2}, {'hello': "world", 'score': 1.5}, {'hello': "world", 'score': 1.02}, 
         {'hello': "world", 'score': 1.75}] 

具体来说,我想找到与得分键相关联的值的最小值、最大值和归一化值(这意味着我必须更新现有字典)。

我已经以如下明显的方式实现了它。但是,我想知道是否有更好的方法来实现这一目标?

list1 = [{'hello': "world", 'score': 1.2}, {'hello': "world", 'score': 1.5}, {'hello': "world", 'score': 1.02}, 
         {'hello': "world", 'score': 1.75}] 
 
 
def min_value(rank_norm): 
    list_values = [] 
    for x in rank_norm: 
        list_values.append(x['score']) 
    return min(list_values) 
 
 
def max_value(rank_norm): 
    list_values = [] 
    for x in rank_norm: 
        list_values.append(x['score']) 
    return max(list_values) 
 
 
def normalize_dict(rank_norm, min_val, max_val): 
    for x in rank_norm: 
        x['score'] = (x['score']-min_val)/(max_val - min_val) 
    return rank_norm 
 
min_val_list = min_value(list1) 
max_val_list = max_value(list1) 
 
print(min_val_list) 
print(max_val_list) 
 
print("Original dict:  ", list1) 
print("Normalized dict: ", normalize_dict(list1, min_val_list, max_val_list)) 

我正在使用 Python 3。

请您参考如下方法:

您可以像这样更新您的原始词典:

list1 = [{'hello': "world", 'score': 1.2}, {'hello': "world", 'score': 1.5}, {'hello': "world", 'score': 1.02}, 
     {'hello': "world", 'score': 1.75}] 
values = [i["score"] for i in list1] 
minimum = min(values) 
maximum = max(values) 
normalized_dict = [{a:b if a == "hello" else (b-minimum)/float(maximum-minimum) for a, b in i.items()} for i in list1] 

输出:

[{'score': 0.24657534246575336, 'hello': 'world'}, {'score': 0.6575342465753424, 'hello': 'world'}, {'score': 0.0, 'hello': 'world'}, {'score': 1.0, 'hello': 'world'}]