簡體   English   中英

如何根據值出現的次數對字典列表進行排序

[英]how to sort a list of dictionaries based on how many times a value occours

我有一個字典列表,我需要知道哪個名字在同一個字典中有最多的給定值

我需要在沒有導入模塊的情況下執行此操作

[
 {"name": name1, "value": value1}
 {"name": name2, "value": value1}
 {"name": name1, "value": value1}
]

例如這里如果給定值是 value1 我會得到 name1 作為結果,因為它在與 name1 相同的字典中出現 2 次

注意:value1 也可能與 name1 以外的其他名稱一起出現,所以我不僅需要知道它出現的名稱,而且還需要知道它出現次數最多的名稱

有點難以解釋我希望有人能理解這個問題。

不知道如何有效地解決這個問題

如果我理解您的請求,您正在尋找“名稱”鍵的內容,該內容在“值”鍵是特定值的條目中重復次數最多。 這個 function 通過以下方式在沒有進口的情況下做到這一點:

  1. 過濾到與您的“值”值匹配的項目
  2. 計算每個“名稱”值的出現次數
  3. 返回計數最大的名稱
def f(data, search):
    a = [x['name'] for x in data if x['value'] == search]
    return max([(x,a.count(x)) for x in set(a)], key=lambda x: x[1])

用法:

data = [
 {"name": 'name1', "value": 'value1'},
 {"name": 'name2', "value": 'value1'},
 {"name": 'name1', "value": 'value1'},
 {"name": 'name2', "value": 'value2'},
 {"name": 'name2', "value": 'value2'},
 {"name": 'name1', "value": 'value3'}
]

print(f(data,'value1'))

這是使用get()方法的另一種有效方法:

given_value = 'value1'
name_counts = {} 

for d in list_of_dicts:
    if d['value'] == given_value:
        name_counts[d['name']] = name_counts.get(d['name'], 0) + 1

most_common_name = max(name_counts, key=name_counts.get)
print(f"Most occurrence is: {most_common_name}. Count: {name_counts[most_common_name]}")

Most occurrence is: name1. Count: 2

您可以使用輔助字典來跟蹤值與特定名稱相關聯的次數。

def getNameWithMaxOccur(value):
    b = {} # name as key, number of occurrences as value
    for d in a:
        if d["value"] == value:
            if d["name"] not in b:
                b[d["name"]] = 1
            else:
                b[d["name"]] += 1
    return max(b, key=b.get) # name with max number of occurrences

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM