在Sklearn中,有没有一种干净的方法来转换字典列表?

时间:2019-02-14 06:46:55

标签: python machine-learning scikit-learn

我有一个要扩展的字典列表。要使用sklearn缩放器,我需要将字典转换为列表。然后,我将列表重新转换成字典。这就是我正在做的:

HttpClientHandler

有没有更清洁的方法?

3 个答案:

答案 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]