Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有一种方法可以列出列表中不同元素的不同变量的出现次数?_Python_Python 3.x_List_Dictionary_Counter - Fatal编程技术网

Python 是否有一种方法可以列出列表中不同元素的不同变量的出现次数?

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”:计数

这是我目前正在处理的列表列表,问题是计算每个元素(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”:计数器({'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})}