input: Write a python function to generate fake data with specified row count, column count, and data types.
  assert len(generate_fake_data(100, 3, ['int', 'float', 'string'])) == 100
  assert len(generate_fake_data(50, 2, ['int', 'float'])[0]) == 2
  assert all(isinstance(row[0], int) for row in generate_fake_data(10, 1, ['int']))
  assert all(isinstance(row[1], float) for row in generate_fake_data(5, 2, ['string', 'float']))
output: import random
  import string
  
  def generate_fake_data(row_count, col_count, data_types):
      def get_random_int():
          return random.randint(0, 100)
  
      def get_random_float():
          return random.uniform(0.0, 100.0)
  
      def get_random_string():
          return ''.join(random.choices(string.ascii_letters + string.digits, k=10))
  
      type_generators = {
          'int': get_random_int,
          'float': get_random_float,
          'string': get_random_string
      }
  
      data = []
      for _ in range(row_count):
          row = [type_generators[data_type]() for data_type in data_types]
          data.append(row)
  
      return data