我想计算看起来像这样的字典列表的某些统计数据:
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'}]
