将键值对划分为n组和y或更小的算法

2024-09-18 01:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的键值对:

'NANOUSDT.csv.gz': 15,
'ENJUSDT.csv.gz': 19,
'DGBBTC.csv.gz': 0,
'BTSUSDT.csv.gz': 1,
'BLZBTC.csv.gz': 42,
'BANDUSDT.csv.gz': 14,
'ETCUSDT.csv.gz': 202

它包含大约300多个项目。有些是大的。有些是小的。我想创建具有以下条件的密钥列表:

  1. 列表中的值之和不能超过10000
  2. 列表包含的元素不能超过8个

没有一件物品的尺寸超过10000

我怎样才能做到这一点


1条回答
网友
1楼 · 发布于 2024-09-18 01:44:33

下面是一个例子:

kvs = {'1': 9999,
       '2': 19,
       '3': 0,
       '4': 1,
       '5': 42,
       '6': 14,
       '7': 14,
       '8': 14,
       '9': 14,
       '10': 14,
       '11': 10000}
buckets = []
cur_bucket = []
weight_so_far = 0
for k, v in kvs.items():
    if len(cur_bucket) == 8 or weight_so_far + v > 10000:
        buckets.append(cur_bucket)
        cur_bucket = []
        weight_so_far = 0
    weight_so_far += v
    cur_bucket.append(k)
if cur_bucket:
    buckets.append(cur_bucket)

print(buckets)

输出

[['1'], ['2', '3', '4', '5', '6', '7', '8', '9'], ['10'], ['11']]

这就是你要找的吗

相关问题 更多 >