【发布时间】:2022-10-15 23:35:19
【问题描述】:
我有一个字典列表,如下所示:
[{'user': '123456', 'db': 'db1', 'size': '8628'}
{'user': '123456', 'db': 'db1', 'size': '7168'}
{'user': '123456', 'db': 'db1', 'size': '38160'}
{'user': '222345', 'db': 'db3', 'size': '8628'}
{'user': '222345', 'db': 'db3', 'size': '8628'}
{'user': '222345', 'db': 'db5', 'size': '840'}
{'user': '34521', 'db': 'db6', 'size': '12288'}
{'user': '34521', 'db': 'db6', 'size': '476'}
{'user': '2345156', 'db': 'db7', 'size': '5120'}.....]
此列表包含数百万个条目。每个用户可以在多个数据库中找到,每个用户可以在同一个数据库中拥有多个整体。我想总结一下每个用户每个 db 占用的大小。我不想使用熊猫。 目前我这样做:
- 我创建了 2 个唯一用户列表和唯一数据库
- 使用这些列表遍历大列表并总结 user 和 db 相同的地方
result = []
for user in unique_users:
for db in unique_dbs:
total_size = 0
for i in big_list:
if (i['user'] == user and i['db'] == db):
total_size += float(i['size'])
if(total_size) > 0:
row = {}
row['user'] = user
row['db'] = db
row['size'] = total_size
result.append(row)
问题是这个三重 for 循环发展成非常大的东西(数千亿次迭代),需要永远总结结果。 如果 big_list 很小,则效果很好。
我应该如何处理它以保持快速和简单? 非常感谢!
【问题讨论】:
-
为什么不只创建一个用户映射到数据库列表及其相应大小?
-
我该怎么做?
-
你为什么不想使用熊猫?它会让它变得微不足道......
-
数据是按用户和数据库排序的吗?
-
“我想总结一下每个用户每个 db 占用的大小。”我不太了解。对于此处显示的输入,输出应该是什么?
标签: python arrays performance for-loop bigdata