Python 是否有一种方法可以列出列表中不同元素的不同变量的出现次数?
这是我目前正在处理的列表列表,问题是计算每个元素(a01、a03、a04)的s1和s2的出现次数。我知道的唯一方法是使用count(),但它只适用于单个元素 在我使用了Counter和default之后(感谢@JPP的帮助!):Python 是否有一种方法可以列出列表中不同元素的不同变量的出现次数?,python,python-3.x,list,dictionary,counter,Python,Python 3.x,List,Dictionary,Counter,这是我目前正在处理的列表列表,问题是计算每个元素(a01、a03、a04)的s1和s2的出现次数。我知道的唯一方法是使用count(),但它只适用于单个元素 在我使用了Counter和default之后(感谢@JPP的帮助!): d=defaultdict(计数器) 对于动物、日期、sumlist中的站: d[动物][站]+=1 我得到: defaultdict(, {'a04':计数器({'s2':5,'s1':5}), 'a01':计数器({'s1':2,'s2':1}), “a03”:计数
d=defaultdict(计数器)
对于动物、日期、sumlist中的站:
d[动物][站]+=1
我得到:
defaultdict(,
{'a04':计数器({'s2':5,'s1':5}),
'a01':计数器({'s1':2,'s2':1}),
“a03”:计数器({'s1':6,'s2':4})}
出现的次数是有数量的,但有没有办法使两个字典类似:
{a01:S1的出现次数,a04:S1的出现次数,a03:S1的出现次数}
和S2相同吗
非常感谢!您正在寻找的是
计数器对象的defaultdict
:
sumlist = [
['a01', '01-24-2017', 's1'],
['a03', '01-24-2017', 's2'],
['a03', '09-24-2017', 's1'],
['a03', '10-23-2017', 's1'],
['a04', '11-01-2017', 's1'],
['a04', '11-02-2017', 's2'],
['a04', '11-03-2017', 's1'],
['a04', '01-01-2017', 's1']]
如果希望您的值成为键,请反转键
和val
:
from collections import defaultdict, Counter
d = defaultdict(Counter)
for key, _, val in sumlist:
d[key][val] += 1
print(d)
defaultdict(collections.Counter,
{'a01': Counter({'s1': 1}),
'a03': Counter({'s1': 2, 's2': 1}),
'a04': Counter({'s1': 3, 's2': 1})})
你可以试试这个
d = defaultdict(Counter)
for key, _, val in sumlist:
d[val][key] += 1
print(d)
defaultdict(collections.Counter,
{'s1': Counter({'a01': 1, 'a03': 2, 'a04': 3}),
's2': Counter({'a03': 1, 'a04': 1})})
就是
{a:Counter(c[2] for c in l if c[0]==a) for a in set(map(itemgetter(0),l))}
如果你只有<代码> {a01:发生次数} /代码>,你怎么知道发生的次数是指S1还是S2?你是不是要表示发生的次数?哦,我想制作两个字典,一个是S1,另一个是S2,下面是帮助的答案之一。如果是的话,考虑一下(左边的绿色刻度),或者要求澄清。
>>> from collections import Counter
>>> from operator import itemgetter
>>> set(map(itemgetter(0),l)) #get the zeroth element to get the keys
set(['a03', 'a01', 'a04'])
>>> {a:0 for a in set(map(itemgetter(0),l))} #dict comprehension
{'a03': 0, 'a01': 0, 'a04': 0}
>>> {a:[c[2] for c in l if c[0]==a] for a in set(map(itemgetter(0),l))} #if the key matches then get the 2nd index
{'a03': ['s2', 's1', 's1'], 'a01': ['s1'], 'a04': ['s1', 's2', 's1', 's1']}
>>> {a:Counter(c[2] for c in l if c[0]==a) for a in set(map(itemgetter(0),l))}
{'a03': Counter({'s1': 2, 's2': 1}), 'a01': Counter({'s1': 1}), 'a04': Counter({'s1': 3, 's2': 1})}