input: Write a python function to group strings by their characters.
  assert group_by_characters(['apple', 'banana', 'grape']) == {'a': ['apple', 'banana', 'grape'], 'p': ['apple', 'grape'], 'l': ['apple'], 'e': ['apple', 'grape'], 'b': ['banana'], 'n': ['banana'], 'g': ['grape'], 'r': ['grape']}
  assert group_by_characters(['cat', 'dog', 'fish']) == {'c': ['cat'], 'a': ['cat'], 't': ['cat'], 'd': ['dog'], 'o': ['dog'], 'g': ['dog'], 'f': ['fish'], 'i': ['fish'], 's': ['fish'], 'h': ['fish']}
  assert group_by_characters(['hello', 'world']) == {'h': ['hello'], 'e': ['hello'], 'l': ['hello', 'world'], 'o': ['hello', 'world'], 'w': ['world'], 'r': ['world'], 'd': ['world']}
output: def group_by_characters(strings):
      from collections import defaultdict
      result = defaultdict(list)
      for string in strings:
          for char in set(string):
              result[char].append(string)
      return dict(result)