diff --git a/itemloaders/__init__.py b/itemloaders/__init__.py
index 090a73e..07bf48c 100644
--- a/itemloaders/__init__.py
+++ b/itemloaders/__init__.py
@@ -3,7 +3,6 @@ Item Loader
 
 See documentation in docs/topics/loaders.rst
 """
-from collections import defaultdict
 from contextlib import suppress
 
 from itemadapter import ItemAdapter
@@ -109,9 +108,10 @@ class ItemLoader:
         context['item'] = item
         self.context = context
         self.parent = parent
-        self._local_values = defaultdict(list)
+        self._local_values = {}
         # values from initial item
         for field_name, value in ItemAdapter(item).items():
+            self._values.setdefault(field_name, [])
             self._values[field_name] += arg_to_iter(value)
 
     @property
@@ -207,6 +207,7 @@ class ItemLoader:
         value = arg_to_iter(value)
         processed_value = self._process_input_value(field_name, value)
         if processed_value:
+            self._values.setdefault(field_name, [])
             self._values[field_name] += arg_to_iter(processed_value)
 
     def _replace_value(self, field_name, value):
@@ -272,15 +273,16 @@ class ItemLoader:
         """
         proc = self.get_output_processor(field_name)
         proc = wrap_loader_context(proc, self.context)
+        value = self._values.get(field_name, [])
         try:
-            return proc(self._values[field_name])
+            return proc(value)
         except Exception as e:
             raise ValueError("Error with output processor: field=%r value=%r error='%s: %s'" %
-                             (field_name, self._values[field_name], type(e).__name__, str(e)))
+                             (field_name, value, type(e).__name__, str(e)))
 
     def get_collected_values(self, field_name):
         """Return the collected values for the given field."""
-        return self._values[field_name]
+        return self._values.get(field_name, [])
 
     def get_input_processor(self, field_name):
         proc = getattr(self, '%s_in' % field_name, None)

diff --git a/tests/test_base_loader.py b/tests/test_base_loader.py
index f57d004..fdc3e5f 100644
--- a/tests/test_base_loader.py
+++ b/tests/test_base_loader.py
@@ -403,6 +403,12 @@ class BasicItemLoaderTest(unittest.TestCase):
         self.assertRaises(ValueError, il.add_value, 'name',
                           ['marta', 'other'], Compose(float))
 
+    def test_get_unset_value(self):
+        loader = ItemLoader()
+        self.assertEqual(loader.load_item(), {})
+        self.assertEqual(loader.get_output_value('foo'), [])
+        self.assertEqual(loader.load_item(), {})
+
 
 class BaseNoInputReprocessingLoader(ItemLoader):
     title_in = MapCompose(str.upper)

Calling get_output_value causes loader to assign an "empty" value to field
# Description

If a field in an ItemLoader has not been set, calling `get_output_value` mistakenly assigns an empty object to that item. See the example bellow.

### Steps to Reproduce

```python
from scrapy.loader import ItemLoader
from scrapy import Item, Field

class MyItem(Item):
    field = Field()

loader = ItemLoader(MyItem())
```

Then, simply loading the item correctly produces an empty dict
```python
>>> loader.load_item()
{}
```

But calling `get_output_value` before that instantiates the field:
```python
>>> loader.get_output_value("field")
[]

>>> loader.load_item()
{'field': []}
```
tests/test_base_loader.py::BasicItemLoaderTest::test_get_unset_value
tests/test_base_loader.py::BasicItemLoaderTest::test_add_value tests/test_base_loader.py::BasicItemLoaderTest::test_add_zero tests/test_base_loader.py::BasicItemLoaderTest::test_compose_processor tests/test_base_loader.py::BasicItemLoaderTest::test_default_input_processor tests/test_base_loader.py::BasicItemLoaderTest::test_default_output_processor tests/test_base_loader.py::BasicItemLoaderTest::test_empty_map_compose tests/test_base_loader.py::BasicItemLoaderTest::test_error_input_processor tests/test_base_loader.py::BasicItemLoaderTest::test_error_output_processor tests/test_base_loader.py::BasicItemLoaderTest::test_error_processor_as_argument tests/test_base_loader.py::BasicItemLoaderTest::test_extend_custom_input_processors tests/test_base_loader.py::BasicItemLoaderTest::test_extend_default_input_processors tests/test_base_loader.py::BasicItemLoaderTest::test_get_value tests/test_base_loader.py::BasicItemLoaderTest::test_identity_input_processor tests/test_base_loader.py::BasicItemLoaderTest::test_inherited_default_input_processor tests/test_base_loader.py::BasicItemLoaderTest::test_input_processor_inheritance tests/test_base_loader.py::BasicItemLoaderTest::test_item_passed_to_input_processor_functions tests/test_base_loader.py::BasicItemLoaderTest::test_iter_on_input_processor_input tests/test_base_loader.py::BasicItemLoaderTest::test_load_item_ignore_none_field_values tests/test_base_loader.py::BasicItemLoaderTest::test_load_item_using_custom_loader tests/test_base_loader.py::BasicItemLoaderTest::test_load_item_using_default_loader tests/test_base_loader.py::BasicItemLoaderTest::test_loader_context_on_assign tests/test_base_loader.py::BasicItemLoaderTest::test_loader_context_on_declaration tests/test_base_loader.py::BasicItemLoaderTest::test_loader_context_on_instantiation tests/test_base_loader.py::BasicItemLoaderTest::test_map_compose_filter tests/test_base_loader.py::BasicItemLoaderTest::test_map_compose_filter_multil tests/test_base_loader.py::BasicItemLoaderTest::test_output_processor_error tests/test_base_loader.py::BasicItemLoaderTest::test_output_processor_using_classes tests/test_base_loader.py::BasicItemLoaderTest::test_output_processor_using_function tests/test_base_loader.py::BasicItemLoaderTest::test_partial_processor tests/test_base_loader.py::BasicItemLoaderTest::test_replace_value tests/test_base_loader.py::BasicItemLoaderTest::test_self_referencing_loader tests/test_base_loader.py::NoInputReprocessingFromDictTest::test_avoid_reprocessing_with_initial_values_list tests/test_base_loader.py::NoInputReprocessingFromDictTest::test_avoid_reprocessing_with_initial_values_single tests/test_base_loader.py::NoInputReprocessingFromDictTest::test_avoid_reprocessing_without_initial_values_list tests/test_base_loader.py::NoInputReprocessingFromDictTest::test_avoid_reprocessing_without_initial_values_single