Gau Rav
Gau Rav

Reputation: 355

Insert list into a particular value inside a list of dictionaries

How can I insert a list inside of a list that is in a dictionary?

[
  {
    "branches": [],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  },
  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }
]

and my required condition is like this :

[
  {
    "branches": [  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  }
]

This is the code :

for i in res:
    # print(i)
    update_users = {"user_id":i,'user_name': res[i][0][0],'role' : res[i][0][1],
    "report_to":res[i][0][2],"email":res[i][0][3] ,"branches" : []}
    data.append(update_users)
    print(type(data))
    
    for j in res[i]:
        print(j)
        update_branches = {"branch_id":j[4],"branch_name":j[5]}
        ses.append(update_branches)
        # print(type(ses))
        data.append(update_branches)

This is the sample data :

{2: [('NorokUser1', '2', '1', '[email protected]', 1,
'NorokBranch2')], 3: [('NorokUser2', '2', '1', '[email protected]',
1, 'NorokBranch2'),  ('NorokUser2', '2', '1', '[email protected]',
2, 'NorokBranch3')], 4: [('NorokUser3', '2', '1',
'[email protected]', 3, 'NorokBranch4')], 5: [('NorokUser4', '2',
'1', '[email protected]', 1, 'NorokBranch2'), ('NorokUser4', '2',
'1', '[email protected]', 2, 'NorokBranch3'), ('NorokUser4', '2',
'1', '[email protected]', 3, 'NorokBranch4'), ('NorokUser4', '2',
'1', '[email protected]', 4, 'NorokBranch5')]}

Upvotes: 2

Views: 75

Answers (2)

Gau Rav
Gau Rav

Reputation: 355

Finally got the solution ! My list was getting out of index. so here is the solution.

Code:

            for i in res:
                # print(i)
                update_users = {"user_id":i,'user_name': res[i][0][0],'role' : res[i][0][1],
                "report_to":res[i][0][2],"email":res[i][0][3] ,"branches" : []}
                data.append(update_users)
                # print(type(data))
                
                for j in res[i]:
                    print(j)
                    update_branches = {"branch_id":j[4],"branch_name":j[5]}
                    ses.append(update_branches)
                    print(type(ses))
                    print(data[count]['branches'].append(update_branches))
                count +=1

Output :

[
  {
    "branches": [
      {
        "branch_id": 1,
        "branch_name": "NorokBranch2"
      }
    ],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  },
  {
    "branches": [
      {
        "branch_id": 1,
        "branch_name": "NorokBranch2"
      },
      {
        "branch_id": 2,
        "branch_name": "NorokBranch3"
      }
    ],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 3,
    "user_name": "NorokUser2"
  },
  {
    "branches": [
      {
        "branch_id": 3,
        "branch_name": "NorokBranch4"
      }
    ],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 4,
    "user_name": "NorokUser3"
  },
  {
    "branches": [
      {
        "branch_id": 1,
        "branch_name": "NorokBranch2"
      },
      {
        "branch_id": 2,
        "branch_name": "NorokBranch3"
      },
      {
        "branch_id": 3,
        "branch_name": "NorokBranch4"
      },
      {
        "branch_id": 4,
        "branch_name": "NorokBranch5"
      }
    ],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 5,
    "user_name": "NorokUser4"
  }
]

Upvotes: 0

Andreas
Andreas

Reputation: 9197

To manipulate a list inside a dictionary which is inside a list you do it in the same way you would if it was a simple dictionary: dictionary["key"] = value the value can also be a list. Since the dictionary is in a list, you first reference to the correct dictionary inside the list, which you can do like this: dictionary[0] if it is on position 0 in the list and then set the value like this: dictionary[0]["key"] = value

Sample code:

lst = [
  {
    "branches": [],
    "email": "[email protected]",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  },
  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }
]


next(iter(lst))['branches'] = [  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }]

print(lst)

or use [0] if you are uncomfortable with next(iter()):

lst[0]['branches'] = [  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }]

if the dictionary is not always on index 0 you can search for it like this:

next(item for item in dictionary if item["user_name"] == "NorokUser1")

or for multiple criteria:

next(item for item in dictionary if (item["user_name"] == "NorokUser1") & (item["user_id"] == 2))

Upvotes: 1

Related Questions