为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2022-11-29 15:17:28
我有一个看起来像这样的列表。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 中执行此操作。
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

虽然我这样做的方式不是很有效,但是通过遍历字典并检查值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}]


查看完整回答
反对 回复 2022-11-29
?
波斯汪

TA贡献1811条经验 获得超4个赞

您可以使用itertools.groupby对具有相同data值的字典进行分组:

from itertools import groupby


def 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}

]


查看完整回答
反对 回复 2022-11-29
?
白板的微信

TA贡献1883条经验 获得超3个赞

我不确定这有多有效,但它应该可以完成工作。


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'] += 1


data = [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}] 


查看完整回答
反对 回复 2022-11-29
  • 3 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号