我有一个要扩展的字典列表。要使用sklearn缩放器,我需要将字典转换为列表。然后,我将列表重新转换成字典。这就是我正在做的:
HttpClientHandler
有没有更清洁的方法?
答案 0 :(得分:1)
这应该更干净一些
MappingSqlQuery
答案 1 :(得分:1)
当您将数据作为字典列表时,pandas Dataframe将是一个理想选择!
缩放后,必须使用数据框的列名称来创建字典。
import pandas as pd
from sklearn.preprocessing import RobustScaler
my_dict1 = {'a': 1324, 'b': 2, 'c': 3}
my_dict2 = {'a': 13, 'b': 123, 'c': 31}
X = [my_dict1, my_dict2]
#[{'a': 1324, 'b': 2, 'c': 3}, {'a': 13, 'b': 123, 'c': 31}]
df = pd.DataFrame(X)
scaler = RobustScaler()
transformed = scaler.fit_transform(df)
transformed_x = [dict(zip(df.columns,x)) for x in transformed]
#[{'a': 1.0, 'b': -1.0, 'c': -1.0}, {'a': -1.0, 'b': 1.0, 'c': 1.0}]
答案 2 :(得分:1)
我对这个问题的看法得出了这个解决方案。它与您的非常相似,只是最后一部分使用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]