**An [isogram](https://en.wikipedia.org/wiki/Isogram)** (also known as a "nonpattern word") is a logological term for a word or phrase without a repeating letter. It is also used by some to mean a word or phrase in which each letter appears the same number of times, not necessarily just once.

You task is to write a method `isogram?` that takes a string argument and returns true if the string has the properties of being an isogram and false otherwise. Anything that is not a string is not an isogram (ints, nils, etc.)


**Properties:**
 
 - must be a string
 - cannot be nil or empty
 - each letter appears the same number of times (not necessarily just once)
 - letter case is not important (= case insensitive)
 - non-letter characters (e.g. hyphens) should be ignored

Source: codewars | Difficulty: EASY
Tags: String algorithms

Starter code: def is_isogram(word):
	

Solutions:
from collections import Counter
import re

def is_isogram(word):
	if type(word) is not str or not word:
		return False
	return len(set(Counter(re.sub('[^a-z]', '', word.lower())).values())) == 1


from collections import Counter

def is_isogram(word):
	try:
		return len(set(Counter(filter(str.isalpha, word.lower())).values())) == 1
	except AttributeError:
		return False


is_isogram = lambda s: 1 == isinstance(s, str) == len(set(__import__('collections').Counter(filter(str.isalpha, s.lower())).values()))


def is_isogram(word):
	if not (word and isinstance(word, str)):
		return False
	word = word.lower()
	return len(set((word.count(c) for c in set(word) if c.isalpha()))) == 1


def is_isogram(word):
	if type(word) is str:
		if word is not None:
			w = ''.join((i.lower() for i in word if ord(i.lower()) in range(97, 123) or ord(i.lower()) in range(48, 58)))
			if len(w) > 0:
				if len(w) % len(set(w)) == 0:
					return True
	return False


import collections

def is_isogram(word):
	if not isinstance(word, str) or not word:
		return False
	counter = collections.Counter((c for c in word.lower() if c.isalpha()))
	return len(set((count for (c, count) in counter.items()))) == 1


from collections import Counter

def is_isogram(word):
	if not isinstance(word, str):
		return False
	counts = Counter(filter(str.isalpha, word.lower()))
	return bool(counts) and min(counts.values()) == max(counts.values())


def is_isogram(word):
	if type(word) != str or word == '':
		return False
	word = word.lower()
	cnts = [word.count(c) for c in word if c.isalpha()]
	return len(set(cnts)) == 1


is_isogram = lambda word: type(word) == str and bool(word) and (len(set(__import__('collections').Counter(__import__('re').sub('[^a-z]', '', word.lower())).values())) == 1)


def is_isogram(word):
	try:
		word = word.lower()
		letters = [c for c in word if c.isalpha()]
		return len(set((word.count(c) for c in letters))) == 1
	except AttributeError:
		return False