Не удается объединить словари в список

#python #list #dictionary #extend

#python #Список #словарь #расширить

Вопрос:

Итак, у меня есть этот фрагмент кода для генерации некоторого ответа для ответа api.

     @app.route("/api/topFour",methods = ['POST'])
def top():
    parser = request.get_json()
    user_id = parser["user_id"]
    item = {}
    answer = []
    parameters = {"user_id":user_id,"start_date":"2018-01-01","last_date":"2019-12-31"}
    response = requests.post("https://my_doamin/app/api/get-customer-list",params= parameters)
    data = response.json()
    if data["status"] == "1":
        customer_list = data["customerList"]
        print(customer_list)
        for i in customer_list:
            item["customer_id"]= i["id"]
            item["customer_name"]=i["company_name"]
            print(item)
            answer.extend(item)
    return jsonify({"user_id":user_id,"top4user": answer})
  

итак, в моем cmd: это вывод для списка клиентов:

 [{'id': 422689, 'full_name': 'jeff bezos', 'company_name': 'Amazon inc', 'create_date': '2019-03-08 17:38:48'}, {'id': 423053, 'full_name': 'akshit', 'company_name': 'HP Globalsoft pvt ltd', 'create_date': '2019-03-09 12:31:42'}, {'id': 422666, 'full_name': 'bill gates', 'company_name': 'Microsoft C
orporation', 'create_date': '2019-03-08 17:16:26'}, {'id': 423034, 'full_name': 'mukesh', 'company_name': 'Reliance Industries Limited', 'create_date': '2019-03-09 12:26:15'}]
  

и это для печати (элемент):

 {'customer_id': 422689, 'customer_name': 'Amazon inc'}
{'customer_id': 423053, 'customer_name': 'HP Globalsoft pvt ltd'}
{'customer_id': 422666, 'customer_name': 'Microsoft Corporation'}
{'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'}
  

Но когда я расширяю это в список, он выдает этот ответ:

 {
    "top4user": [
        "customer_id",
        "customer_name",
        "customer_id",
        "customer_name",
        "customer_id",
        "customer_name",
        "customer_id",
        "customer_name"
    ],
    "user_id": 6052
}
  

Ниже приведен результат, который я ожидал:

 [
{'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'}, 
{'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'}, 
{'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'},
{'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'}
]
  

Это должен быть список словарей. Я пробовал с помощью append.

редактировать: Это было время, когда я был новичком и был разочарован. Пожалуйста, предоставьте отзыв в комментарии, а не просто добавляйте отрицательность. Думаю, лучше помочь улучшить.

Комментарии:

1. Мне не ясно, чего вы хотите достичь, можете ли вы предоставить ожидаемый результат?

2. [{‘customer_id’: 423034, ‘customer_name’: ‘Reliance Industries Limited’}, {‘customer_id’: 423034, ‘customer_name’: ‘Reliance Industries Limited’}, {‘customer_id’: 423034, ‘customer_name’: ‘Reliance Industries Limited’}, {‘customer_id’: 423034, ‘customer_name’: ‘Reliance Industries Limited’}] Это должно быть только так, но в этом имена одинаковы .. в основном должен появиться список словарей.

3. Создайте новый item dict для каждой итерации.

Ответ №1:

Можете ли вы попробовать следующее:

 for i in customer_list:
    item = {}
    item["customer_id"] = i["id"]
    item["customer_name"] = i["company_name"]
    print(item)
    answer.append(item)
  

Вывод следующий:

 [
  {'customer_id': 422689, 'customer_name': 'Amazon inc'}, 
  {'customer_id': 423053, 'customer_name': 'HP Globalsoft pvt ltd'}, 
  {'customer_id': 422666, 'customer_name': 'Microsoft Corporation'}, 
  {'customer_id': 423034, 'customer_name': 'Reliance Industries Limited'}
]
  

Комментарии:

1. да, видите, все элементы одинаковы?

2. секундочку, пожалуйста

3. Он предоставляет только ключевые значения с расширением!

4. да, но в решении я использовал append вместо extend и создал новый dict внутри for цикла