簡體   English   中英

Python散列字典中最常見的元素

[英]Most frequent element in Python hashed dictionary

我有以下字典:

data = {112: [25083], 25091: [6939], 32261: [9299, 6939, 3462], 32934: [7713, 6762, 6939], 34854: [6939], 56630: [7713]}

我試圖用最常見的值來克服。 輸出必須看起來像 ({value: number, ...}):

{6939:4, 7713:2, 25083:1, 9299:1, 3462:1, 6762:1}

或 ({value: keys, ...})

{6939:[25091, 32261, 32934, 34854], 7713:[32934, 56630], 25083:[25083], 9299:[32261], 3462:[32261], 6762:32934 }

我將腳本用於普通字典,但對於未散列的我不知道如何管理它。

k = {}
from collections import defaultdict
for key, val in data.items():
    for i in val:
        k.setdefault(i, set()).add(k)

您可以使用Counterdefaultdict

from collections import Counter, defaultdict
from itertools import chain

data = {112: [25083], 25091: [6939], 32261: [9299, 6939, 3462], 32934: [7713, 6762, 6939], 34854: [6939], 56630: [7713]}

counter = Counter(chain.from_iterable(data.values()))

print(counter) # Counter({6939: 4, 7713: 2, 25083: 1, 9299: 1, 3462: 1, 6762: 1})

data_inverted = defaultdict(list)
for k, vs in data.items():
    for v in vs:
        data_inverted[v].append(k)

print(data_inverted)
# defaultdict(<class 'list'>,
# {25083: [112],
#  6939: [25091, 32261, 32934, 34854],
#  9299: [32261],
#  3462: [32261],
#  7713: [32934, 56630],
#  6762: [32934]})

實際上,如果您要獲取data_inverted ,則可以在data_inverted之后使用以下內容(而不是使用collections.Counter

counter = {k: len(v) for k, v in data_inverted.items()}

暫無
暫無

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

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