Как исправить ошибку dictionary changed size during iteration?
Проблема связана с тем, что вы пытаетесь модифицировать словарь, по элементам которого итерируетесь.
В условиях вашего кода это не проблема. Но вы должны сначала прежде чем начнётся цикл с удалениями) взять список пар элементов из вашего словаря.
products.items() возвращает не список, а итератор по элементам словаря. Само собой этот итератор ломается как только вы удаляете из словаря первый элемент.
Но если этот итератор до первого удаления полностью превратить в список, то удалять потом можно что хотите.
for product_id, value in list(products.items()):
    if value['g_1'] == 0:
        del products[product_id]
Или так:
new_products_dict = {k: v for k, v in products.items() if v['g_1'] != 0}
Здесь создаётся новый словарь из элементов, которые удовлетворяют вашим условиям.
products = {
    '00000234': {'value1': 0, 'value2': 23},
    '567333': {'value1': 5, 'value2': 23},
    '23234243': {'value1': 25, 'value2': 23},
}
products = {product_id: values for product_id, values in products.items() if values['value1']}
print(products)
# {'567333': {'value1': 5, 'value2': 23}, '23234243': {'value1': 25, 'value2': 23}}

Или

spoilerСоздай еще один словарь, проверяй условие в цикле 
если проходит по твоим параметрам (что нет параметров равных 0) добавляй в новый словарь,
по окончании цикла возвращай новый словарь