我有一个嵌套的列表。在列表中,它有一个日期和一个名称。我想要日期的用户计数。例如,在'2019-10-11‘中,有5个用户。但是sam用户已经存在,所以我将其算作4。
a =[['sam', '2019-10-11'], ['ram', '2019-10-12'], ['king', '2019-10-11'],
['queen', '2019-10-10'], ['ram', '2019-10-12'], ['kumar', '2019-10-11'],
['jeba', '2019-10-11'], ['sam', '2019-10-10'], ['sam', '2019-10-11'],
['howl', '2019-10-14']]需要的输出:
a = [['2019-10-10','2019-10-11','2019-10-12','2019-10-14'],[2,4,1,1]]发布于 2019-10-10 13:59:13
您可以使用下面给出的代码,它迭代数组并计算json b中的键。
a =[['sam', '2019-10-11'], ['ram', '2019-10-12'], ['king', '2019-10-11'],
['queen', '2019-10-10'], ['ram', '2019-10-12'], ['kumar', '2019-10-11'],
['jeba', '2019-10-11'], ['sam', '2019-10-10'], ['sam', '2019-10-11'],
['howl', '2019-10-14']]
b = {}
for iter in a:
if iter[1] in b:
if(iter[0] not in b[iter[1]]):
b[iter[1]][iter[0]] = 1
else:
b[iter[1]] = {iter[0]: 1}
print(b)上述代码的结果将是:
{'2019-10-11': {'sam': 1, 'king': 1, 'kumar': 1, 'jeba': 1}, '2019-10-12': {'ram': 1}, '2019-10-10': {'queen': 1, 'sam': 1}, '2019-10-14': {'howl': 1}}当然,您可以将其转换为如下所示的数组结构
for key in b:
print(key, len(b[key]))
res[0].append(key)
res[1].append(len(b[key]))其结果将是
[['2019-10-11', '2019-10-12', '2019-10-10', '2019-10-14'], [4, 1, 2, 1]]发布于 2019-10-10 13:57:47
你可以使用collections中的defaultdict,比如
>>> a =[['sam', '2019-10-11'], ['ram', '2019-10-12'], ['king', '2019-10-11'],
... ['queen', '2019-10-10'], ['ram', '2019-10-12'], ['kumar', '2019-10-11'],
... ['jeba', '2019-10-11'], ['sam', '2019-10-10'], ['sam', '2019-10-11'],
... ['howl', '2019-10-14']]
>>>
>>> from collections import defaultdict
>>> d = defaultdict(set) # using `set` to not care about duplicate `name` on same `date`, otherwise use `list` instead of `set`
>>> # and use `d[date].append(name)`
>>> for name, date in a:
... d[date].add(name) # maybe, two users can be there for the same date ?
...
>>> data = [(k,len(v)) for k,v in sorted(d.items())]
>>> data
[('2019-10-10', 2), ('2019-10-11', 4), ('2019-10-12', 1), ('2019-10-14', 1)]
>>> list(zip(*data)) # returns a `list` of `tuple`s which usually should be fine for any iteration
[('2019-10-10', '2019-10-11', '2019-10-12', '2019-10-14'), (2, 4, 1, 1)]
>>> required = [list(x) for x in zip(*data)] # if you really want `list` of `list`s
>>> required
[['2019-10-10', '2019-10-11', '2019-10-12', '2019-10-14'], [2, 4, 1, 1)]]发布于 2019-10-10 14:23:14
from collections import Counter
list(zip(*Counter(list(zip(*set(zip(*zip(*a)))))[1]).items()))
Out[54]: [('2019-10-11', '2019-10-10', '2019-10-12', '2019-10-14'), (4, 2, 1, 1)]这可以简化为:
list(zip(*Counter([j for _, j in set([tuple(i) for i in a])]).items()))
[('2019-10-11', '2019-10-10', '2019-10-12', '2019-10-14'), (4, 2, 1, 1)]不导入模块的另一种方法:
b = set(zip(*zip(*a)))
d = {}
for name,date in b:
d[date] = d.get(date,0)+1
list(zip(*d.items()))
[('2019-10-11', '2019-10-10', '2019-10-12', '2019-10-14'), (4, 2, 1, 1)]如果你需要列表的排序列表,你可以这样做:
[list(i) for i in zip(*sorted(d.items(),key=lambda x:x[0]))]
Out[112]: [['2019-10-10', '2019-10-11', '2019-10-12', '2019-10-14'], [2, 4, 1, 1]]https://stackoverflow.com/questions/58316172
复制相似问题