Создать новый список словарей в новом словаре в Python - PullRequest
1 голос
/ 14 апреля 2020

У меня есть список словарей, и мне нужно создать новый, содержащий новые ключи, а также ключи и значения из моего исходного словаря. Один из ключей должен содержать список словарей (это будут значения из оригинального словаря). Мои данные выглядят следующим образом:

data = [{'CloseDate': '2020-05-01',
  'OpportunityID': '1',
  'CustomerID': '10'},
 {'CloseDate': '2020-07-31',
  'OpportunityID': '2',
  'CustomerID': '11'}]

Я хочу, чтобы мой новый список диктов выглядел следующим образом:

new_data = [{'id': '39',
           'Query': [{'records': '40', 'Order Name': '1', 'CustomerID': '10'}]},
           {'id': '39',
           'Query': [{'records': '40', 'Order Name': '2', 'CustomerID': '11'}]}]

Я пробовал следующее:

new_data = []

for item in data: 
    params_dict = {}
    params_dict["id"] = "39"
    params_dict["Query"] = []
    # push new_dicts in params_dict
    new_dict = {}
    new_dict["records"] = "40"
    new_dict["Order Name"] = data["OpportunityID"]
    params_dict.append(new_dict)
    new_data.append(params_dict)

Ошибка: TypeError: list indices must be integers or slices, not str

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020
datas_list=[]
for get_dict in data:
    new_dict={}
    new_dict["id"] = 39
    new_dict['Query']=[]
    other_dictionary={}
    other_dictionary['records']=40
    for values in get_dict:
        if values == "OpportunityID":
            other_dictionary['Order Name'] = get_dict[values]
        if values == "CustomerID" :
            other_dictionary[values] = get_dict[values]
    new_dict["Query"].append(other_dictionary)
    datas_list.append(new_dict)
1 голос
/ 14 апреля 2020

Вы пытались перебрать item, а не data внутри l oop.
Также вам нужно добавить к Query.
Попробуйте:

new_data = []

for item in data: 
    params_dict = {}
    params_dict["id"] = "39"
    params_dict["Query"] = []
    new_dict = {} # defined new_dict
    new_dict["records"] = "40"
    new_dict["Order Name"] = item["OpportunityID"] # here it should be item
    params_dict["Query"].append(new_dict)
    new_data.append(params_dict)

Также:

new_data = []

for item in data: 
    params_dict = {}
    params_dict["id"] = "39"
    params_dict["Query"] = [{"records" : "40","Order Name" :item["OpportunityID"] }]
    new_data.append(params_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...