我有一個字典串列,我想從'confidence'中獲取最大的浮點數,其中鍵('key')是相同的。
ab = [{'key': 'gdpr.gdpr_compliance.1', 'value': 'Yes', 'idref': '69dbdba4-14d4-4ac8-a318-0d658e4d5b07', 'xpath': '/html/body/p[24]', ' confidence': 0.985}。
{'key': 'gdpr.gdpr_compliance.2'/span>, 'value'/span>: 'Yes', 'idref': '69e2589a-bbf2-49c3-96fc-01fbee5dde03', 'xpath': '/html/body/p[27]', ' confidence': 0.989}。
{'key': 'data_collected.personal_identifiable_information.1'/span>, 'value'/span>: 'Yes', 'idref': 'f6819b54-07a7-4839-b0cc-8343eed28342', 'xpath': '/html/body/ul[6]/li[1]', ' confidence': 0.562}。
{'key': 'data_collected.personal_identifiable_information.2'/span>, 'value'/span>: 'Yes', 'idref': '496400e5-9665-4697-96bc-c55176cdbd02', 'xpath': '/html/body/ul[6]/li[2]', ' confidence': 0.661}]
在這里你可以看到前兩個字典有gdpr,但第三個字典有data_collected。
在這里,我不明白我們如何能得到最大值
。我試著用這種方式來做
lis = [] 。
for i in ab:
spl = i['key'].split('. ' )[0]
i['key'] = spl
if i['key] == spl:
lis.append(i['confidence'])
print(lis)
預期輸出應該是。[0.989, 0.661]
uj5u.com熱心網友回復:
我不確定當你的資料是基于鍵的時候,你為什么想得到一個串列。我自己會使用dict,但話說回來,也許你只想比較相鄰的值,你可以用itertools.groupby來做。我將在下面列出這兩種方法。
dict
maxes = {}。
for d in ab:
confidence = d['confidence']
spl = d['key'].split('。')[0]
if spl not in maxes or confidence > maxes[spl] 。
maxes[spl] = confidence
print(maxes)
{'gdpr': 0.989, 'data_collected': 0.661}。
groupby
from itertools import groupby
grouper = groupby(ab, lambda d: d['key'].split('。')[0]
maxes = [(k, max(d[' confidence'] for d in g) for k, g in grouper ]
print(maxes)
[('gdpr', 0. 989),('data_collected',0.661)]
在這里,我保留了這些鍵,但你完全可以將它們丟棄。
lis = [max(d['confidence'] for d in g) for _k, g in grouper] 。
print(lis)
[0.989, 0.661]
uj5u.com熱心網友回復:
你在哪里出錯了
你分割了i['key'],然后你又分配了相同的值。這是不可能的。
i['key']分配給spl,然后你立即檢查它們是否相等。很明顯,它們將是。一種正確的方法
Dictionarycode class="hljs language-python">highest_value_dict = {}。
for i in ab:
spl = i['key'].split('。')[0]
# 如果沒有這樣的鍵,則添加它。
# else check if this key is greater than the one in highest_value_dict
if spl not in highest_value_dict or highest_value_dict[spl] < i[' confidence'] 。
highest_value_dict[spl] = i['confidence] 。
輸出 :
{'gdpr'。0.989, 'data_collected': 0.661}。
如果你真的想讓這些值變成串列
list(highest_value_dict.values())
輸出 :
[0.989, 0.661]
uj5u.com熱心網友回復:
類似下面的內容。我們的想法是使用defaultdict,它將把鍵映射到最大置信度
from collections import defaultdict
ab = [{'key': 'gdpr.gdpr_compliance.1', 'value': 'Yes', 'idref': '69dbdba4-14d4-4ac8-a318-0d658e4d5b07',
'xpath': '/html/body/p[24]', ' confidence': 0.985}。
{'key': 'gdpr.gdpr_compliance.2'/span>, 'value'/span>: 'Yes', 'idref': '69e2589a-bbf2-49c3-96fc-01fbee5dde03',
'xpath': '/html/body/p[27]', ' confidence': 0.989}。
{'key': 'data_collected.personal_identifiable_information.1'/span>, 'value'/span>: 'Yes',
'idref': 'f6819b54-07a7-4839-b0cc-8343eed28342', 'xpath': '/html/body/ul[6]/li[1]', ' confidence': 0.562}。
{'key': 'data_collected.personal_identifiable_information.2'/span>, 'value'/span>: 'Yes'。
'idref': '496400e5-9665-4697-96bc-c55176cdbd02', 'xpath': '/html/body/ul[6]/li[2]', ' confidence': 0.661}]
data = defaultdict(float)
for entry in ab:
value = entry['confidence']
key = entry['key'].split('。')[0]
if data[key] < value :
data[key] = value
for k,v in data.items()。
print(f'{k} -> {v}'/span>)
輸出
gdpr -> 0.989。
data_collected -> 0.661。
uj5u.com熱心網友回復:
我建議采用O(n)時間和記憶體復雜度的解決方案:
from typing import List
def get_maximal_values(data: dict) -> List[float] 。
# 創建迭代器以提取所需資料。
preparing_data = (((x['key'].split('.')[0], x[' confidence'] ) for x in data)
# 找出每個唯一鍵的最大值。
結果 = {}
for key, confidence in preparing_data:
result[key] = max(result.get(key, 0), confidence)
# 只回傳信心值。
return list(result.values()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311388.html
標籤:
