diff --git a/faker/utils/distribution.py b/faker/utils/distribution.py
index <HASH>..<HASH> 100644
--- a/faker/utils/distribution.py
+++ b/faker/utils/distribution.py
@@ -1,6 +1,7 @@
 # coding=utf-8
 
 import bisect
+from sys import version_info
 from faker.generator import random
 
 def random_sample():
@@ -17,10 +18,13 @@ def cumsum(it):
 def choice_distribution(a, p):
     assert len(a) == len(p)
 
-    cdf = list(cumsum(p))
-    normal = cdf[-1]
-    cdf2 = [float(i) / float(normal) for i in cdf]
-    uniform_sample = random_sample()
-    idx = bisect.bisect_right(cdf2, uniform_sample)
-
-    return a[idx]
+    if version_info.major >= 3 and version_info.minor >= 6:
+        from random import choices
+        return choices(a, weights=p)[0]
+    else:
+        cdf = list(cumsum(p))
+        normal = cdf[-1]
+        cdf2 = [float(i) / float(normal) for i in cdf]
+        uniform_sample = random_sample()
+        idx = bisect.bisect_right(cdf2, uniform_sample)
+        return a[idx]
Use random.choices when available for better performance