Почему в список добавляются все значения из условия, а в словарь нет?

some_lst = [{'a': 'b', 'c': 3}, {'a': 'd', 'c': 3}, {'a': 'b', 'c': 4}]
some_dict = dict()
new_lst = []
for i in some_lst:

    if i['a'] == 'b':
        new_lst.append(
            dict(
                letter=i['a'],
                num=i['c']
            )
        )
        some_dict['data'] = {
            'letter': i['a'],
            'num': i['c']
        }

print(new_lst)
print(some_dict)

Ответы (1 шт):

Автор решения: Aidar

При добавлении значений в список new_lst, каждый элемент списка создается как отдельный словарь с ключами 'letter' и 'num', которые берутся из условия if i['a'] == 'b'.

При добавлении значений в словарь some_dict, ключ 'data' устанавливается только один раз, и каждый раз значение этого ключа обновляется для каждого элемента some_lst, удовлетворяющего условию if i['a'] == 'b'.

Если вы хотите добавить в словарь some_dict все элементы, удовлетворяющие условию, вам нужно использовать список или другую структуру данных в качестве значения для ключа 'data'.

some_lst = [{'a': 'b', 'c': 3}, {'a': 'd', 'c': 3}, {'a': 'b', 'c': 4}]
some_dict = dict()
new_lst = []
some_dict['data'] = []  # Используем список в качестве значения для ключа 'data'
for i in some_lst:
    if i['a'] == 'b':
        new_lst.append(
            dict(
                letter=i['a'],
                num=i['c']
            )
        )
        some_dict['data'].append(  # Добавляем каждый элемент в список значений ключа 'data'
            dict(
                letter=i['a'],
                num=i['c']
            )
        )

print(new_lst)
print(some_dict)
→ Ссылка