我有一个列表,就像你在下面看到的一样,我想计算一下列表的第一个元素相对于元组的第一个元素出现了多少次。
[['a', (2, 0.4632342), 0, 0],
['b', (2, 0.38278952), 0, 0],
['a', (0, 0.51164687), 0, 2],
['a', (2, 0.49053752), 0, 0],
['b', (6, 0.22554141), 0, 1],
['b', (11, 0.33718306), 0, 0],
['a', (0, 0.51265407), 0, 0],
['b', (0, 0.38063252), 0, 0],
['a', (2, 0.3401981), 0, 0],
['a', (6, 0.39846212), 0, 0]]
在上面的列表中,结果应该如下所示:
{'2':{'a':'3','b':'1'}, '0':{'a':'2' , 'b':'1'}, '6':{'a':'1', 'b':'1'}, '11':{'a':0 , 'b':'1'}}
或者这样:
{'2':{(a,3),(b,1)}, '0':{(a,2), (b,1)}, '6':{(a,1), (b,1)}, '11':{(a,0) , (b,1)}}
发布于 2019-08-16 01:31:15
使用collections.Counter
和itertools.groupby
from collections import Counter
from itertools import groupby
f = lambda x: x[1][0]
d = {k: Counter(i[0] for i in g) for k, g in groupby(sorted(l, key=f), key=f)}
print(d)
输出:
{0: Counter({'a': 2, 'b': 1}), 2: Counter({'a': 3, 'b': 1}), 11: Counter({'b': 1}), 6: Counter({'b': 1, 'a': 1})}
发布于 2019-08-16 02:04:50
l = [['a', (2, 0.4632342), 0, 0],
['b', (2, 0.38278952), 0, 0],
['a', (0, 0.51164687), 0, 2],
['a', (2, 0.49053752), 0, 0],
['b', (6, 0.22554141), 0, 1],
['b', (11, 0.33718306), 0, 0],
['a', (0, 0.51265407), 0, 0],
['b', (0, 0.38063252), 0, 0],
['a', (2, 0.3401981), 0, 0],
['a', (6, 0.39846212), 0, 0]]
unique_first_in_tuples = set([x[1][0] for x in l])
unique_first_in_lists = set([x[0] for x in l])
def counter(first_tuple):
int_dict = {y : len([x for x in l if x[0]==y
and x[1][0]==first_tuple]) for y in
unique_first_in_lists}
return int_dict
output = {x : counter(x) for x in unique_first_in_tuples}
返回:
{0: {'a': 2, 'b': 1}, 2: {'a': 3, 'b': 1}, 11: {'a': 0, 'b': 1}, 6: {'a': 1, 'b': 1}}
https://stackoverflow.com/questions/57517937
复制相似问题