1

I have a list of dictionaries having 16k dictionaries. I want to split the list of dictionaries into multiple lists of dictionaries.

Current list of dictionaries -

list = [{'system_name': 'W1PVTL1098', 'fdc_inv_sa_team': 'X3Virtualization'},
        {'system_name': 'W1PVTL1100', 'fdc_inv_sa_team': 'X3Virtualization'},
        {'system_name': 'r3bvap1154', 'fdc_inv_sa_team': 'X2Linux_NSS'}, 
        {'system_name': 'r1qvap1281', 'fdc_inv_sa_team': 'X2Linux_NSS'}, 
        {'system_name': 'R3QVAP1123', 'fdc_inv_sa_team': 'X2Linux_GBS'}, 
        {'system_name': 'W3BVAP1294', 'fdc_inv_sa_team': 'X2Windows_NSS'}]

Desired Output -

list1 = [{'system_name': 'W1PVTL1098', 'fdc_inv_sa_team': 'X3Virtualization'},
         {'system_name': 'W1PVTL1100', 'fdc_inv_sa_team': 'X3Virtualization'},
         {'system_name': 'r3bvap1154', 'fdc_inv_sa_team': 'X2Linux_NSS'}]

list2 = [{'system_name': 'r1qvap1281', 'fdc_inv_sa_team': 'X2Linux_NSS'}, 
         {'system_name': 'R3QVAP1123', 'fdc_inv_sa_team': 'X2Linux_GBS'}, 
         {'system_name': 'W3BVAP1294', 'fdc_inv_sa_team': 'X2Windows_NSS'}]
  • what is the rule to split? sized based or based on particular value? – marcadian Jul 18 '17 at 01:02
  • @marcadian It is size based. for example, 10000 dictionaries records in one list and so on. –  Jul 18 '17 at 01:04
  • Consider [this](https://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks) solution. You are dealing with a list of "things". In your case, the "things" are dictionaries. But, ultimately, you are dealing with a list. The link I provided shows you how you can separate in to evenly sized chunks and make use of doing efficiently with "yield". However, based on your desired output of wanting to put it in to separate "arguments", I would advise against this. Instead, consider actually creating a dictionary that you can access by a numerical key. – idjaw Jul 18 '17 at 01:08
  • So, you would end up with a dictionary, where each key would hold a "chunked" set of your list-of-dictionaries. Something like: `{0: [{}], 1: [{}]}`. – idjaw Jul 18 '17 at 01:10
  • @marcadian Thanks! It works. –  Jul 18 '17 at 01:21

1 Answers1

1

You can try this:

l = [{'system_name': 'W1PVTL1098', 'fdc_inv_sa_team': 'X3Virtualization'},
    {'system_name': 'W1PVTL1100', 'fdc_inv_sa_team': 'X3Virtualization'},
    {'system_name': 'r3bvap1154', 'fdc_inv_sa_team': 'X2Linux_NSS'}, 
    {'system_name': 'r1qvap1281', 'fdc_inv_sa_team': 'X2Linux_NSS'}, 
    {'system_name': 'R3QVAP1123', 'fdc_inv_sa_team': 'X2Linux_GBS'}, 
    {'system_name': 'W3BVAP1294', 'fdc_inv_sa_team': 'X2Windows_NSS'}]

n = 3
n1 = len(l)//n
new = [l[i:i+n1] for i in range(0, len(l), n1)]
print new

This code now creates a list that contains the data broken into n sublists.

Output:

[[{'system_name': 'W1PVTL1098', 'fdc_inv_sa_team': 'X3Virtualization'}, {'system_name': 'W1PVTL1100', 'fdc_inv_sa_team': 'X3Virtualization'}], [{'system_name': 'r3bvap1154', 'fdc_inv_sa_team': 'X2Linux_NSS'}, {'system_name': 'r1qvap1281', 'fdc_inv_sa_team': 'X2Linux_NSS'}], [{'system_name': 'R3QVAP1123', 'fdc_inv_sa_team': 'X2Linux_GBS'}, {'system_name': 'W3BVAP1294', 'fdc_inv_sa_team': 'X2Windows_NSS'}]]
Ajax1234
  • 69,937
  • 8
  • 61
  • 102