猿问

使用 Python 获取最接近的数据字典

考虑到您有一个包含不同元素的字典列表,例如:


{

    "acousticness": 0.0681,

    "energy": 0.724,

    "loudness": -5.941,

    "tempo": 132.056,

    "valence": 0.676

},

{

    "acousticness": 0.2754,

    "energy": 0.866,

    "loudness": -7.874,

    "tempo": 180.056,

    "valence": 0.540

},    

{

    "acousticness": 0.0681,

    "energy": 0.724,

    "loudness": -5.941,

    "tempo": 132.056,

    "valence": 0.676

}

你让用户自己输入字典的能力,例如


{

    "acousticness": 0.1382,

    "energy": 0.7274,

    "loudness": -5.8246,

    "tempo": 122.6412,

    "valence": 0.6153

}

您将如何遍历 Python3 中的字典以获取最接近的字典?


我发现这如何找到在一个正常的数组最近的元素,但无法回避的是如何做阵列比较了相同的解释。


提前感谢您的任何帮助!



繁星coding
浏览 215回答 1
1回答

斯蒂芬大帝

假设您想要字典值之间的最小绝对差异,您可以执行以下操作:data = [{    "acousticness": 0.0681,    "energy": 0.724,    "loudness": -5.941,    "tempo": 132.056,    "valence": 0.676},    {        "acousticness": 0.2754,        "energy": 0.866,        "loudness": -7.874,        "tempo": 180.056,        "valence": 0.540    },    {        "acousticness": 0.0681,        "energy": 0.724,        "loudness": -5.941,        "tempo": 132.056,        "valence": 0.676    }]target = {    "acousticness": 0.1382,    "energy": 0.7274,    "loudness": -5.8246,    "tempo": 122.6412,    "valence": 0.6153}def key(d, t=target):    return sum(abs(t[k] - v) for k, v in d.items())result = min(data, key=key)print(result)输出{'tempo': 132.056, 'loudness': -5.941, 'acousticness': 0.0681, 'valence': 0.676, 'energy': 0.724}答案的关键是使用min的key参数。请注意,可以调整此答案以适应多种接近度度量。例如,您可以更改键来计算字典值之间的欧几里德距离:import mathdef key(d, t=target):    return math.sqrt(sum((t[k] - v)**2 for k, v in d.items())
随时随地看视频慕课网APP

相关分类

Python
我要回答