我有一个要扩展的字典列表。要使用sklearn缩放器,我需要将字典变成列表。然后,我将列表重新转换成字典。这就是我在做什么:
keys = sorted(X[0].keys())
scaler = RobustScaler()
transformed = scaler.fit_transform([[x[k] for k in keys] for x in X])
X = [{k: x[idx] for idx, k in enumerate(keys)} for x in transformed]
有没有更清洁的方法?
我对这个问题的看法得出了这个解决方案。它与您的非常相似,只是最后一部分使用dict()
且zip()
外观更简洁(我认为)。
X_original = [
{'a': 2, 'b': 3},
{'a': 7, 'b': 6},
{'a': 1, 'b': 7},
]
keys = sorted(X_original[0].keys())
X_values = [
[d[k] for k in keys]
for d in X_original]
scaler = RobustScaler()
X_transformed = scaler.fit_transform(X_values)
X_final = [
dict(zip(keys, x))
for x in X_transformed]
检查变量将显示正确的结果:
>>> X_original
[{'a': 2, 'b': 3}, {'a': 7, 'b': 6}, {'a': 1, 'b': 7}]
>>> X_values
[[2, 3], [7, 6], [1, 7]]
>>> X_transformed
[[ 0. -1.5 ]
[ 1.66666667 0. ]
[-0.33333333 0.5 ]]
>>> X_final
[{'a': 0.0, 'b': -1.5},
{'a': 1.6666666666666667, 'b': 0.0},
{'a': -0.3333333333333333, 'b': 0.5}]
您可能已经注意到,我喜欢分隔代码。如果您希望它紧凑,那么它仅与最后一行中的代码不同:
X_original = [
{'a': 2, 'b': 3},
{'a': 7, 'b': 6},
{'a': 1, 'b': 7},
]
keys = sorted(X_original[0].keys())
scaler = RobustScaler()
X_transformed = scaler.fit_transform([[d[k] for k in keys] for d in X_original])
X_final = [dict(zip(keys, x)) for x in X_transformed]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句