Вставить в словарь с тем же именем ключа [python]

#python #dictionary

Вопрос:

Пытаясь создать новый словарь из списка словарей ;в этих словарях повторяются имена ключей, мне нужно добавить эти ключи со значениями в новый пустой словарь

 items=[
         {
            'actual_batch_qty': 5,
            'actual_qty': 6,
            'allow_zero_valuation_rate': 4,
            'amount': 80.0,
            'base_amount': 80.0,
         },
         {
            'actual_batch_qty': 7,
            'actual_qty': 2,
            'allow_zero_valuation_rate': 5,
            'amount': 140,
            'base_amount':100,
         }
      ]
test={}
 

Я трирд, но он всегда принимает последние значения словаря

 for data in items:
   
    test['actual_batch_qty'] = data['actual_batch_qty']
    test['amount']=data['base_amount']
        
print(test) 
 

выходы:

 {'actual_batch_qty': 7, 'amount': 100}
 

Ожидаемый Результат:

 [{'actual_batch_qty': 5, 'amount': 80.0},{'actual_batch_qty': 7, 'amount': 100}]
 

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

1. ожидаемый результат неверен Python

2. @gold_cy Почему не действует?

3. потому что то, что вы описываете, — это набор, полный словарей, и это неверно, потому что словари не хэшируются

Ответ №1:

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

 test={}

for i, data in enumerate(items):

    test[str(i)] = { 'actual_batch_qty': data['actual_batch_qty'], 'amount': data['base_amount'] }
    
print(test) 
 

Выход:

 {'0': {'actual_batch_qty': 5, 'amount': 80.0}, '1': {'actual_batch_qty': 7, 'amount': 100}}
 

Чтобы пройти через него:

 for k,v in test.items():
    #stuff
    pass
 

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

1. итак, как выполнить цикл через этот вывод?

2. да,если продолжить с new_list=[] для k, v в test.items(): new_list.append(v) выдаст ожидаемый результат, большое спасибо.

Ответ №2:

UPD: Вопрос был отредактирован, поэтому ответ ниже не имеет значения

Используйте defaultdict

 from collections import defaultdict


items=[{'actual_batch_qty':5,
            'actual_qty': 6,
           'allow_zero_valuation_rate': 4,
             'amount': 80.0,
            'base_amount':80.0,
             },
             {'actual_batch_qty': 7,
               'actual_qty': 2,
               'allow_zero_valuation_rate': 5,
               'amount': 140,
                 'base_amount':100,
                }]

test = defaultdict(list)

for data in items:
    test['actual_batch_qty'].append(data['actual_batch_qty'])
    test['weigth'].append(data['total_weight'])

print(test) 
 

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

1. это выводит: defaultdict(<class ‘list’>, {‘actual_batch_qty’: [5, 7], ‘сумма’: [80,0, 100]}) Мне нужен каждый ключ в паре со значением, даже если ключ был повторен

2. дикт в python-это пара ключ: значение. Как вы планируете получить значение из ожидаемого результата? Если по индексу — вы можете создать список словарей. Если по ключу — вы должны создать ключ для каждого вложенного словаря

3. Мне нужно динамически добавлять выходные данные в список словарей