为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2021-09-28 21:22:37
考虑到您有一个包含不同元素的字典列表,例如:{    "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 中的字典以获取最接近的字典?我发现这如何找到在一个正常的数组最近的元素,但无法回避的是如何做阵列比较了相同的解释。提前感谢您的任何帮助!
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

假设您想要字典值之间的最小绝对差异,您可以执行以下操作:


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 math


def key(d, t=target):

    return math.sqrt(sum((t[k] - v)**2 for k, v in d.items())


查看完整回答
反对 回复 2021-09-28
  • 1 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信