Use index to directly update the array. No need to create a new array or dictionary since arrays are mutable. This way it will be faster.
mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [8, 7, 6]}
for val in mydict.values():
for i in range(len(val)):
val[i] *= 3
print(mydict)
UPDATE: Execution time of the various solutions:
import timeit
timeit.timeit()
code1 = '''mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [8, 7, 6]}
for val in mydict.values():
for i in range(len(val)):
val[i] *= 3'''
print(timeit.timeit(stmt=code1, number=1000000))
code2 = '''mydict = {"a": [1, 2, 3], "b": [3, 4, 5], "c": [8, 7, 6]}
mydict = {k: [i * 3 for i in v] for k, v in mydict.items()}'''
print(timeit.timeit(stmt=code2, number=1000000))
code3 = '''mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [8, 7, 6]}
{k: list(map(lambda x: x * 3, v)) for k, v in mydict.items()}'''
print(timeit.timeit(stmt=code3, number=1000000))
code4 = '''mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [8, 7, 6]}
for l in mydict.values():
l[:] = [x*3 for x in l]'''
print(timeit.timeit(stmt=code4, number=1000000))
Result:
1.4062689999991562
1.4332131000010122
1.9182285999995656
1.394005999998626
Ran this several times and the results vary each time, but mostly I see code4 is the faster solution followed by code1.