#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. Мне нужно динамически добавлять выходные данные в список словарей