簡體   English   中英

如何計算單詞的頻率並在列表列表中添加單詞的相關權重

[英]How to count the frequency of words and add the associated weight of the words in a list of lists

我有以下數據

[[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]

我需要以下輸出

[ABC, 2, 7]
[BCD, 4, 13]
[CDE, 1, 3]
[DEF, 1, 3]

我需要將詞的數量計為位置[1],並將該詞的數量求和為位置[0]。 結果是

[Word, freq, sum of weight] 

我檢查了對對列表中對項發現頻率,在python中檢查了數字 對列表的 頻率分布,但是它們不能解決我的問題。

我嘗試了這個但沒有成功

res = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]
 d = {}
for freq, label in res:
    if label not in d:
        d[label] = {}
    inner_dict = d[label]
    if freq not in inner_dict:
        inner_dict[freq] = 0
    inner_dict[freq] += freq

print(inner_dict)

大熊貓:

import pandas
data = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]
df = pandas.DataFrame(data, columns=['count', 'word'])
result = df.groupby('word')['count'].agg((len, sum))

結果:

       len sum
word
ABC      2   7
BCD      4  13
CDE      1   3
DEF      1   3

要對結果進行排序,請使用sort_values

result.sort_values(['sum', 'len'])

      len  sum
word
CDE     1    3
DEF     1    3
ABC     2    7
BCD     4   13

嘗試這個:

data = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]

result = {}
for weight, value in data:
    if value not in result:
        result[value] = [1, weight]
    else:
        result[value][0] += 1
        result[value][1] += weight

print(result)

結果:

{'ABC': [2, 7], 'BCD': [4, 13], 'CDE': [1, 3], 'DEF': [1, 3]}

您可以只使用defaultdict列表理解

a = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]
from collections import defaultdict

d = defaultdict(lambda  : 0)
d2 = defaultdict(lambda : 0)
for i in a:
    d[i[1]] +=1
for i in a :
    d2[i[1]] += i[0]

res =    [ [i, d[i], d2[i]] for i in d.keys() ]

輸出:

[['CDE', 1, 3], ['DEF', 1, 3], ['BCD', 4, 13], ['ABC', 2, 7]]

編輯:@chthonicdaemon指出,初始化defaultdict的一種簡單方法是將int初始化為0,如果需要空字符串則將其初始化為str

這里有一個實用的方法:

l = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]
data = itertools.groupby(l, key=lambda x: x[1]))
[(k, len(x), sum(x)) for k, x in map(lambda (x, y): (x, map(lambda x: x[0], list(y))), data)]
[('ABC', 1, 4), ('BCD', 1, 4), ('CDE', 1, 3), ('ABC', 1, 3), ('DEF', 1, 3), ('BCD', 3, 9)]

you_dictionary.setdefault(key,[]).append(value)有多個值以將它們附加到列表中you_dictionary.setdefault(key,[]).append(value)請使用you_dictionary.setdefault(key,[]).append(value)方法。

a = [[4, 'ABC'], [4, 'BCD'], [3, 'CDE'], [3, 'ABC'], [3, 'DEF'], [3, 'BCD'], [3, 'BCD'], [3, 'BCD']]
my_dict = {}

for item in a:
    key,value=item[1],item[0]
    my_dict.setdefault(key,[]).append(value)
print(my_dict)

my_list = []

for k,v in my_dict.items():
    my_list.append([k,len(v),sum(v)])

print(my_list)

輸出:

{'BCD': [4, 3, 3, 3], 'DEF': [3], 'CDE': [3], 'ABC': [4, 3]}
[['BCD', 4, 13], ['DEF', 1, 3], ['CDE', 1, 3], ['ABC', 2, 7]]

暫無
暫無

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

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