计算整个列表中术语的出现次数,并附加相应的变量

时间:2017-02-13 08:54:54

标签: python python-2.7 list tuples

我有一个列表,每个项目有3个元素,它看起来像这样:

list_A = [(['apple','orange','banana'], 2,0.1),
          (['grape', 'water', 'fountain'], 4, 0.2),
          (['apple', 'grape', 'banana',], 6, 0.3),
          (['orange', 'water', 'apple',], 8, 0.4),...]

首先,我想在整个列表中计算每个术语的出现次数,然后附上对应的变量以形成新的列表。

例如(参见第一行),整个列表中术语(' apple ')的出现次数 3 ,然后< strong>它的两个相应变量连在一起。结果应该是这样的:

new_list = [('apple', 3, 2, 0.1),
            ('apple', 3, 6, 0.3),
            ('apple', 3, 8, 0.4),
            ('orange', 2, 2, 0.1),
            ('banana', 2, 2, 0.1),
            ('grape', 2, 4, 0.2),
            ('water', 2, 4, 0.2),......]

我一直在尝试并使用Counter(x[0] for elem in each)

使用此功能from collections import Counter进行调整

2 个答案:

答案 0 :(得分:2)

这是一种方法:

from collections import Counter

counts = Counter(sum((row[0] for row in list_A), []))

for row in list_A:
  print [(el, counts[el]) + row[1:] for el in row[0]]

这里,sum((row[0] for row in list_A), [])将字符串子列表合并为一个。其余的应该是非常明显的。

答案 1 :(得分:1)

此版本使用功能方法从元组列表中提取字符串。

from collections import Counter
from itertools import chain
from operator import itemgetter

list_A = [
    (['apple', 'orange', 'banana'], 2, 0.1),
    (['grape', 'water', 'fountain'], 4, 0.2),
    (['apple', 'grape', 'banana',], 6, 0.3),
    (['orange', 'water', 'apple',], 8, 0.4),
]

counts = Counter(chain.from_iterable(map(itemgetter(0), list_A)))

new_list = []
for row in list_A:
    head, tail = row[0], row[1:]
    for u in head:
        new_list.append((u, counts[u]) + tail)

new_list.sort()
for row in new_list:
    print(row)

<强>输出

('apple', 3, 2, 0.1)
('apple', 3, 6, 0.3)
('apple', 3, 8, 0.4)
('banana', 2, 2, 0.1)
('banana', 2, 6, 0.3)
('fountain', 1, 4, 0.2)
('grape', 2, 4, 0.2)
('grape', 2, 6, 0.3)
('orange', 2, 2, 0.1)
('orange', 2, 8, 0.4)
('water', 2, 4, 0.2)
('water', 2, 8, 0.4)