【问题标题】:Divide dict of dicts into specific parts将 dict 的 dict 划分为特定的部分
【发布时间】:2017-08-24 11:01:33
【问题描述】:

我有这样的数据格式:

{0: {'offer_id': u'308249', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 1: {'offer_id': u'308255', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 2: {'offer_id': u'283063', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 3: {'offer_id': u'313467', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 4: {'offer_id': u'313673', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 5: {'offer_id': u'324519', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 6: {'offer_id': u'320501', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 7: {'offer_id': u'320503', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 8: {'offer_id': u'323593', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 9: {'offer_id': u'323595', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 10: {'offer_id': u'324441', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 11: {'offer_id': u'324443', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 12: {'offer_id': u'325129', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 13: {'offer_id': u'325131', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 14: {'offer_id': u'325133', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 15: {'offer_id': u'325135', 'affiliate_id': u'1014', 'approval_status': 'approved'}}

我一次只需要处理 10 个字典,所以 我需要将此字典分成几部分,以便每个子部分最多可以有 10 个元素(键/值对)

我需要进行的 API 调用最多可以采用这种格式的 10 个值,因此我需要逐部分处理。

例子:

for data in data_in_chunks_of_10:
    api_call(data)

我如何有效地实现这一目标?

【问题讨论】:

  • 你试过什么效率不够?
  • 对如何在结果字典中分配密钥有任何要求吗?
  • 这个问题我很不清楚。
  • 如果键是从0 向上的连续范围,则没有理由不使用list,这反过来将允许您进行切片和快速的itertools 配方。
  • 你能显示预期的输出或提供更多细节吗?细节不够

标签: python dictionary


【解决方案1】:

您可以使用生成器以所需的块大小返回数据块,如下所示:

def blocks(data, n=10):
    for i in xrange(0, len(data), n):
        yield data[i:i+n]

data = {
    0: {'offer_id': u'308249', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    1: {'offer_id': u'308255', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    2: {'offer_id': u'283063', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    3: {'offer_id': u'313467', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    4: {'offer_id': u'313673', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    5: {'offer_id': u'324519', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    6: {'offer_id': u'320501', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    7: {'offer_id': u'320503', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    8: {'offer_id': u'323593', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    9: {'offer_id': u'323595', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    10: {'offer_id': u'324441', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    11: {'offer_id': u'324443', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    12: {'offer_id': u'325129', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    13: {'offer_id': u'325131', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    14: {'offer_id': u'325133', 'affiliate_id': u'1014', 'approval_status': 'approved'}, 
    15: {'offer_id': u'325135', 'affiliate_id': u'1014', 'approval_status': 'approved'}}

for block in blocks(data.items(), 10):
    print block    

这将为您提供如下两个数据块:

[(0, {'offer_id': u'308249', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (1, {'offer_id': u'308255', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (2, {'offer_id': u'283063', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (3, {'offer_id': u'313467', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (4, {'offer_id': u'313673', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (5, {'offer_id': u'324519', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (6, {'offer_id': u'320501', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (7, {'offer_id': u'320503', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (8, {'offer_id': u'323593', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (9, {'offer_id': u'323595', 'affiliate_id': u'1014', 'approval_status': 'approved'})]
[(10, {'offer_id': u'324441', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (11, {'offer_id': u'324443', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (12, {'offer_id': u'325129', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (13, {'offer_id': u'325131', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (14, {'offer_id': u'325133', 'affiliate_id': u'1014', 'approval_status': 'approved'}), (15, {'offer_id': u'325135', 'affiliate_id': u'1014', 'approval_status': 'approved'})]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-10-20
    • 2021-02-10
    • 2023-03-14
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多