Вставить список в определенное значение внутри списка словарей - PullRequest
2 голосов
/ 05 августа 2020

Как я могу вставить список в список, который есть в словаре?

[
  {
    "branches": [],
    "email": "hocomes1@delowd.com",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  },
  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }
]

и мое необходимое условие выглядит следующим образом:

[
  {
    "branches": [  {
    "branch_id": 1,
    "branch_name": "NorokBranch2"
  }],
    "email": "hocomes1@delowd.com",
    "report_to": "1",
    "role": "2",
    "user_id": 2,
    "user_name": "NorokUser1"
  }
]

Это код:

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)

Это пример данных:

{2: [('NorokUser1', '2', '1', 'hocomes1@delowd.com', 1,
'NorokBranch2')], 3: [('NorokUser2', '2', '1', 'hocomes2@delowd.com',
1, 'NorokBranch2'),  ('NorokUser2', '2', '1', 'hocomes2@delowd.com',
2, 'NorokBranch3')], 4: [('NorokUser3', '2', '1',
'hocomes3@delowd.com', 3, 'NorokBranch4')], 5: [('NorokUser4', '2',
'1', 'hocomes4@delowd.com', 1, 'NorokBranch2'), ('NorokUser4', '2',
'1', 'hocomes4@delowd.com', 2, 'NorokBranch3'), ('NorokUser4', '2',
'1', 'hocomes4@delowd.com', 3, 'NorokBranch4'), ('NorokUser4', '2',
'1', 'hocomes4@delowd.com', 4, 'NorokBranch5')]}

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Чтобы управлять списком внутри словаря, который находится внутри списка, вы делаете это так же, как если бы это был простой словарь: dictionary["key"] = value значение также может быть списком. Поскольку словарь находится в списке, вы сначала ссылаетесь на правильный словарь внутри списка, что можно сделать следующим образом: dictionary[0], если он находится в позиции 0 в списке, а затем установить значение следующим образом: dictionary[0]["key"] = value

Пример кода:

lst = [
  {
    "branches": [],
    "email": "hocomes1@delowd.com",
    "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)

или используйте [0], если вам неудобно использовать next (iter ()):

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

, если словарь не всегда включен index 0, вы можете искать его так:

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

или по нескольким критериям:

next(item for item in dictionary if (item["user_name"] == "NorokUser1") & (item["user_id"] == 2))
0 голосов
/ 06 августа 2020

Наконец-то есть решение! Мой список выходил из индекса. так что вот решение.

Код:

            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

Вывод:

[
  {
    "branches": [
      {
        "branch_id": 1,
        "branch_name": "NorokBranch2"
      }
    ],
    "email": "hocomes1@delowd.com",
    "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": "hocomes2@delowd.com",
    "report_to": "1",
    "role": "2",
    "user_id": 3,
    "user_name": "NorokUser2"
  },
  {
    "branches": [
      {
        "branch_id": 3,
        "branch_name": "NorokBranch4"
      }
    ],
    "email": "hocomes3@delowd.com",
    "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": "hocomes4@delowd.com",
    "report_to": "1",
    "role": "2",
    "user_id": 5,
    "user_name": "NorokUser4"
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...