猿问

保持计数并将其附加到 python 中的列表

我有一个看起来像这样的列表。


data = [

      {'time': 10, 'data': 'abcd'}

      {'time': 10, 'data': 'abcd'}

      {'time': 11, 'data': 'bcd'}

      {'time': 12, 'data': 'dc'}

      {'time': 13, 'data': 'ak'}

      {'time': 11, 'data': 'bcd'}

我需要计算相同的数据对象并保持数据计数。我期待这样的输出。


Expected Output:


data = [

      {'time': 10, 'data': 'abcd','count' : 2}

      {'time': 11, 'data': 'bcd','count' : 2}

      {'time': 12, 'data': 'dc','count' : 1}

      {'time': 13, 'data': 'ak','count' : 1}

可能吗 ?我正在尝试在 python 中执行此操作。


元芳怎么了
浏览 122回答 3
3回答

人到中年有点甜

虽然我这样做的方式不是很有效,但是通过遍历字典并检查值time和data键的值是否相同以进行计数是可行的:data = [    {'time': 10, 'data': 'abcd'},    {'time': 10, 'data': 'abcd'},    {'time': 11, 'data': 'bcd'},    {'time': 12, 'data': 'dc'},    {'time': 13, 'data': 'ak'},    {'time': 11, 'data': 'bcd'}]data_counted = []for d in data:    for d_c in data_counted:        if d['time'] == d_c['time'] and d['data'] == d_c['data']:            d_c['count'] += 1            break    else:        d_new = d.copy()        d_new['count'] = 1        data_counted.append(d_new)print(data_counted)[{'time': 10, 'data': 'abcd', 'count': 2},  {'time': 11, 'data': 'bcd', 'count': 2},  {'time': 12, 'data': 'dc', 'count': 1},  {'time': 13, 'data': 'ak', 'count': 1}]

波斯汪

您可以使用itertools.groupby对具有相同data值的字典进行分组:from itertools import groupbydef keyFunc(d):    return d['data']def merge(*dicts):    return {**dicts[0], 'count': len(dicts)}merged = [merge(*g) for i, g in groupby(sorted(data, key=keyFunc), key=keyFunc)]print(merged)结果merged字典将是:[ {'count': 2, 'data': 'abcd', 'time': 10}, {'count': 1, 'data': 'ak', 'time': 13}, {'count': 2, 'data': 'bcd', 'time': 11}, {'count': 1, 'data': 'dc', 'time': 12}]

白板的微信

我不确定这有多有效,但它应该可以完成工作。data = [      {'time': 10, 'data': 'abcd'},      {'time': 10, 'data': 'abcd'},      {'time': 11, 'data': 'bcd'},      {'time': 12, 'data': 'dc'},      {'time': 13, 'data': 'ak'},      {'time': 11, 'data': 'bcd'},]temp = {}for i in data:    s = "{}-{}".format(i['time'], i['data'])    i['count'] = 1    if (s not in temp.keys()):        temp[s] = i    else:        temp[s]['count'] += 1data = [temp[i] for i in temp.keys()]print(data)[{'count': 2, 'data': 'abcd', 'time': 10}, {'count': 2, 'data': 'bcd', 'time': 11}, {'count': 1, 'data': 'dc', 'time': 12}, {'count': 1, 'data': 'ak', 'time': 13}] 
随时随地看视频慕课网APP

相关分类

Python
我要回答