def keys_with_value(dictionary, v):
	"""
	Return a list of keys from dictionary with value equal to v.

	>>> fruits = {'apple': 10, 'strawberry': 10, 'banana': 5}
	>>> keys_with_value(fruits, 10)
	['apple', 'strawberry']
	"""

	# Solution 1: List Comprehension

	# return [k for k in dictionary if dictionary[k] == v]


	# Solution 2: Iterative

	result = []
	for k in dictionary:
		if dictionary[k] == v:
			result.append(k)
	return result

def flip_sign(dictionary, k):
	"""
	If k is in the dictionary, change the sign of the value associated with k.
	If k is not in the dictionary, add k to the dictionary with value 1.

	>>> fruits = {'apple': 10, 'strawberry': 10, 'banana': 5}
	>>> flip_sign(fruits, 'apple')
	>>> fruits
	{'apple': -10, 'strawberry': 10, 'banana': 5}
	>>> flip_sign(fruits, 'orange')
	>>> fruits
	{'apple': -10, 'strawberry': 10, 'banana': 5, 'orange': 1}
	"""

	if k in dictionary:
		dictionary[k] *= -1
	else:
		dictionary[k] = 1


def conditional_map(lst, func, pred):
	"""
	Return a list of items from lst that satisfy pred, with func applied to each item.

	>>> lst = [1, 2, 3, 4, 5]
	>>> conditional_map(lst, lambda x: x * 2, lambda x: x % 2 == 0)
	[4, 8]
	"""

	# Solution 1: List Comprehension

	# return [func(x) for x in lst if pred(x)]


	# Solution 2: Iterative

	# result = []
	# for item in lst:
	# 	if pred(item):
	# 		result.append(func(item))
	# return result


	# Solution 3: Recursive

	if not lst:
		return []
	elif pred(lst[0]):
		return [func(lst[0])] + conditional_map(lst[1:], func, pred)
	else:
		return conditional_map(lst[1:], func, pred)
