**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

Difficulty: introductory

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(r'[^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(r'[^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