簡體   English   中英

計算集合列表中的出現次數

[英]count occurances in list of sets

我有一個包含 2 個集合列表的變量,它看起來像這樣:

[[{'angular', 'java', 'sql', 'xml-schema'},
  {'db2', 'docker', 'git', 'hibernate', 'jenkins', 'maven', 'rest'}],
 [{'java'}, {'maven'}],
 [{'java'}, {'oracle'}],
 [{'c++', 'cobol', 'java', 'javascript'}, set()],
 [{'angular', 'java'}, set()],
 [{'java'}, set()]]

現在我想做的是計算每個項目的出現次數,我只是不知道該怎么做。 我應該展平整個列表還是有一些關於可以做到這一點的集合的功能?

謝謝!

您可以使用collections.Counter並向他提供您的數據的扁平版本

from collections import Counter

values: list[list[set[str]]] = [
    [{'angular', 'java', 'sql', 'xml-schema'}, {'db2', 'docker', 'git', 'hibernate', 'jenkins', 'maven', 'rest'}],
    [{'java'}, {'maven'}],
    [{'java'}, {'oracle'}],
    [{'c++', 'cobol', 'java', 'javascript'}, set()],
    [{'angular', 'java'}, set()],
    [{'java'}, set()]
]

language = 'java'

ocurrences = Counter([word for sublist in values for subset in sublist for word in subset])
print(ocurrences.most_common(3))  # [('java', 6), ('angular', 2), ('maven', 2)]
print(ocurrences[language])  # 6

如果你想分開 2 套,在語言/其他,這樣做

ocurrences_languages = Counter([word for sublist in values for word in sublist[0]])
print(ocurrences_languages.most_common(3))  # [('java', 6), ('angular', 2), ('sql', 1)]

ocurrences_other = Counter([word for sublist in values for word in sublist[1]])
print(ocurrences_other.most_common(3))  # [('maven', 2), ('docker', 1), ('rest', 1)]

如果你想要它沒有外部模塊,你可以試試我寫的這個函數,只要根對象是一個字符串(可變),它就可以處理任何格式的列表:

def count(list_, count_dict=dict()):
    for i in list_:
        if type(i) == str:
            if i in list(count_dict.keys()):
                count_dict[i] += 1
            else:
                count_dict[i] = 1
        else:
            count_dict.update(count(i, count_dict))
    return count_dict
         


li = [[{'angular', 'java', 'sql', 'xml-schema'},
  {'db2', 'docker', 'git', 'hibernate', 'jenkins', 'maven', 'rest'}],
 [{'java'}, {'maven'}],
 [{'java'}, {'oracle'}],
 [{'c++', 'cobol', 'java', 'javascript'}, set()],
 [{'angular', 'java'}, set()],
 [{'java'}, set()]]
 
print(count(li))

暫無
暫無

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

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