我有一个列表,每个项目有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
进行调整
答案 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)