#!/usr/bin/python3

"""
ΑΣΚΗΣΗ 2
Να γραφεί μια συνάρτηση που να δέχεται ως είσοδο ένα λεξικό και επιστρέφει τα κλειδιά του λεξικού (σε λίστα) όπου οι τιμές τους είναι παλίνδρομα αλφαριθμητικά.
"""

def Pallindrom_val_of_dict(dic):
	if not dic:
		return None
	else:
		return [key for key,val in dic.items() if isPallindrom(val)]

def isPallindrom(mstr):
	lm=len(mstr)//2

	return mstr.lower()==mstr[::-1].lower()

	"""
	for i in range(lm):
		if ((mstr[i].lower()!=(mstr[-i-1].lower()):
			return False
	return True
	"""

def isPallindrom2(mstr):
	"""
	Ελέγχει αν μια δεδομένη συμβολοσειρά είναι παλίνδρομη, αγνοώντας μη αλφαριθμητικούς χαρακτήρες και χωρίς διάκριση πεζών-κεφαλαίων
	"""
	free_str = ''.join( filter(str.isalnum, mstr) ).lower()

	#filter(function or None, iterable) --> filter object
	#returns an iteraitor yielding those items of iterable for which function(item) is True
	#if finction is None, returns the items that are True.
	return free_str == free_str[::-1]

def main():
	dic={1:"aba", 2:"aaacx",3:"123456",4:"AbcBa",5:"ABCBA12"}
	print(f"Τα κλειδιά του λεξικού {dic} όπου οι τιμές τους είναι παλίνδρομα αλφαριθμητικά είναι",Pallindrom_val_of_dict(dic))
	

if __name__=="__main__":
	main()
