亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號