diff --git a/tests/numdict_tests.py b/tests/numdict_tests.py
index f2ed80c7b0cbf148fc2012676761a43b036208e2..4802550bf9ee0c8ccfd5eafb7c1980d198e1145f 100644
--- a/tests/numdict_tests.py
+++ b/tests/numdict_tests.py
@@ -4,6 +4,8 @@
 Unit Tests for sickbeard/numdict.py
 """
 
+# pylint: disable=line-too-long
+
 import sys
 import os.path
 import unittest
@@ -16,7 +18,7 @@ from sickbeard.numdict import NumDict
 PY3 = sys.version_info >= (3, )
 
 if PY3:
-    from collections import UserDict
+    from collections import UserDict  # pylint: disable=no-name-in-module
 else:
     from UserDict import UserDict
 
@@ -25,97 +27,97 @@ class NumDictTest(unittest.TestCase):
     """
     Test the NumDict class
     """
-    def test_constructors(self):
+    def test_constructors(self):  # pylint: disable=too-many-locals, too-many-statements
         """
         Test NumDict constructors
         """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
-        d3 = {'3': 'Aardvark'}  # Numeric string key
-        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
-        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
-        d6 = {1: None, '2': None}  # None as values
-        d7 = {None: 'Empty'}  # None as key
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_3 = {'3': 'Aardvark'}  # Numeric string key
+        dict_4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        dict_5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        dict_6 = {1: None, '2': None}  # None as values
+        dict_7 = {None: 'Empty'}  # None as key
 
         # Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
-        n3 = NumDict(d3)
-        n4 = NumDict(d4)
-        n5 = NumDict(d5)
-        n6 = NumDict(d6)
-        n7 = NumDict(d7)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
+        num_dict_3 = NumDict(dict_3)
+        num_dict_4 = NumDict(dict_4)
+        num_dict_5 = NumDict(dict_5)
+        num_dict_6 = NumDict(dict_6)
+        num_dict_7 = NumDict(dict_7)
 
         # Most NumDicts from dicts should compare equal...
-        self.assertEqual(n, {})
-        self.assertEqual(n0, d0)
-        self.assertEqual(n1, d1)
-        self.assertEqual(n2, d2)
+        self.assertEqual(num_dict, {})
+        self.assertEqual(num_dict_0, dict_0)
+        self.assertEqual(num_dict_1, dict_1)
+        self.assertEqual(num_dict_2, dict_2)
 
         # ...however, numeric keys are not equal to numeric string keys...
-        self.assertNotEqual(n3, d3)
-        self.assertNotEqual(n4, d4)
-        self.assertNotEqual(n5, d5)
-        self.assertNotEqual(n6, d6)
+        self.assertNotEqual(num_dict_3, dict_3)
+        self.assertNotEqual(num_dict_4, dict_4)
+        self.assertNotEqual(num_dict_5, dict_5)
+        self.assertNotEqual(num_dict_6, dict_6)
 
         # ...but None keys work just fine
-        self.assertEqual(n7, d7)
+        self.assertEqual(num_dict_7, dict_7)
 
         # Construct dicts from NumDicts
-        dn = dict(n)
-        dn1 = dict(n1)
-        dn2 = dict(n2)
-        dn3 = dict(n3)
-        dn4 = dict(n4)
-        dn5 = dict(n5)
-        dn6 = dict(n6)
-        dn7 = dict(n7)
+        dict_from_num_dict = dict(num_dict)
+        dict_from_num_dict_1 = dict(num_dict_1)
+        dict_from_num_dict_2 = dict(num_dict_2)
+        dict_from_num_dict_3 = dict(num_dict_3)
+        dict_from_num_dict_4 = dict(num_dict_4)
+        dict_from_num_dict_5 = dict(num_dict_5)
+        dict_from_num_dict_6 = dict(num_dict_6)
+        dict_from_num_dict_7 = dict(num_dict_7)
 
         # All dicts from NumDicts should compare equal
-        self.assertEqual(n, dn)
-        self.assertEqual(n1, dn1)
-        self.assertEqual(n2, dn2)
-        self.assertEqual(n3, dn3)
-        self.assertEqual(n4, dn4)
-        self.assertEqual(n5, dn5)
-        self.assertEqual(n6, dn6)
-        self.assertEqual(n7, dn7)
+        self.assertEqual(num_dict, dict_from_num_dict)
+        self.assertEqual(num_dict_1, dict_from_num_dict_1)
+        self.assertEqual(num_dict_2, dict_from_num_dict_2)
+        self.assertEqual(num_dict_3, dict_from_num_dict_3)
+        self.assertEqual(num_dict_4, dict_from_num_dict_4)
+        self.assertEqual(num_dict_5, dict_from_num_dict_5)
+        self.assertEqual(num_dict_6, dict_from_num_dict_6)
+        self.assertEqual(num_dict_7, dict_from_num_dict_7)
 
         # Construct NumDicts from NumDicts
-        nn = NumDict(n)
-        nn0 = NumDict(n0)
-        nn1 = NumDict(n1)
-        nn2 = NumDict(n2)
-        nn3 = NumDict(n3)
-        nn4 = NumDict(n4)
-        nn5 = NumDict(n5)
-        nn6 = NumDict(n6)
-        nn7 = NumDict(n7)
+        num_dict_from_num_dict = NumDict(num_dict)
+        num_dict_from_num_dict_0 = NumDict(num_dict_0)
+        num_dict_from_num_dict_1 = NumDict(num_dict_1)
+        num_dict_from_num_dict_2 = NumDict(num_dict_2)
+        num_dict_from_num_dict_3 = NumDict(num_dict_3)
+        num_dict_from_num_dict_4 = NumDict(num_dict_4)
+        num_dict_from_num_dict_5 = NumDict(num_dict_5)
+        num_dict_from_num_dict_6 = NumDict(num_dict_6)
+        num_dict_from_num_dict_7 = NumDict(num_dict_7)
 
         # All NumDicts from NumDicts should compare equal
-        self.assertEqual(n, nn)
-        self.assertEqual(n0, nn0)
-        self.assertEqual(n1, nn1)
-        self.assertEqual(n2, nn2)
-        self.assertEqual(n3, nn3)
-        self.assertEqual(n4, nn4)
-        self.assertEqual(n5, nn5)
-        self.assertEqual(n6, nn6)
-        self.assertEqual(n7, nn7)
+        self.assertEqual(num_dict, num_dict_from_num_dict)
+        self.assertEqual(num_dict_0, num_dict_from_num_dict_0)
+        self.assertEqual(num_dict_1, num_dict_from_num_dict_1)
+        self.assertEqual(num_dict_2, num_dict_from_num_dict_2)
+        self.assertEqual(num_dict_3, num_dict_from_num_dict_3)
+        self.assertEqual(num_dict_4, num_dict_from_num_dict_4)
+        self.assertEqual(num_dict_5, num_dict_from_num_dict_5)
+        self.assertEqual(num_dict_6, num_dict_from_num_dict_6)
+        self.assertEqual(num_dict_7, num_dict_from_num_dict_7)
 
         # keyword arg constructor should fail
         with self.assertRaises(TypeError):
             NumDict(one=1, two=2)  # Raise TypeError since we can't have numeric keywords
 
         # item sequence constructors work fine...
-        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2)
-        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2)
-        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2)
-        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dict_from_num_dict_2)
+        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dict_from_num_dict_2)
 
         # ...unless you have a non-numeric key
         with self.assertRaises(TypeError):
@@ -128,39 +130,42 @@ class NumDictTest(unittest.TestCase):
             NumDict([(1, 'one'), (2, 'two')], two=3, five=4)
 
         # alternate constructors
-        d8 = {1: 'Echo', 2: 'Echo'}
-
-        self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6)
-        self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6)
-        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8)
-        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8)
-        self.assertTrue(n1.fromkeys('1 2'.split()) is not n1)
-        self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict)
-        self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict)
-
-    def test_repr(self):
+        dict_8 = {1: 'Echo', 2: 'Echo'}
+
+        self.assertEqual(NumDict.fromkeys('1 2'.split()), dict_from_num_dict_6)
+        self.assertEqual(NumDict().fromkeys('1 2'.split()), dict_from_num_dict_6)
+        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), dict_8)
+        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), dict_8)
+        self.assertTrue(num_dict_1.fromkeys('1 2'.split()) is not num_dict_1)
+        self.assertIsInstance(num_dict_1.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_2.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_3.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(num_dict_4.fromkeys('1 2'.split()), NumDict)
+
+    def test_repr(self):  # pylint: disable=too-many-locals
+        """
+        Test representation of NumDicts
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
-        d3 = {'3': 'Aardvark'}  # Numeric string key
-        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
-        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
-        d6 = {1: None, '2': None}  # None as values
-        d7 = {None: 'Empty'}  # None as key
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_3 = {'3': 'Aardvark'}  # Numeric string key
+        dict_4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        dict_5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        dict_6 = {1: None, '2': None}  # None as values
+        dict_7 = {None: 'Empty'}  # None as key
 
         #  Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
-        n3 = NumDict(d3)
-        n4 = NumDict(d4)
-        n5 = NumDict(d5)
-        n6 = NumDict(d6)
-        n7 = NumDict(d7)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
+        num_dict_3 = NumDict(dict_3)
+        num_dict_4 = NumDict(dict_4)
+        num_dict_5 = NumDict(dict_5)
+        num_dict_6 = NumDict(dict_6)
+        num_dict_7 = NumDict(dict_7)
 
         reps = (
             "{}",
@@ -174,137 +179,143 @@ class NumDictTest(unittest.TestCase):
         )
 
         # Most representations of NumDicts should compare equal to dicts...
-        self.assertEqual(str(n), str({}))
-        self.assertEqual(repr(n), repr({}))
-        self.assertIn(repr(n), reps)
+        self.assertEqual(str(num_dict), str({}))
+        self.assertEqual(repr(num_dict), repr({}))
+        self.assertIn(repr(num_dict), reps)
 
-        self.assertEqual(str(n0), str(d0))
-        self.assertEqual(repr(n0), repr(d0))
-        self.assertIn(repr(n0), reps)
+        self.assertEqual(str(num_dict_0), str(dict_0))
+        self.assertEqual(repr(num_dict_0), repr(dict_0))
+        self.assertIn(repr(num_dict_0), reps)
 
-        self.assertEqual(str(n1), str(d1))
-        self.assertEqual(repr(n1), repr(d1))
-        self.assertIn(repr(n1), reps)
+        self.assertEqual(str(num_dict_1), str(dict_1))
+        self.assertEqual(repr(num_dict_1), repr(dict_1))
+        self.assertIn(repr(num_dict_1), reps)
 
-        self.assertEqual(str(n2), str(d2))
-        self.assertEqual(repr(n2), repr(d2))
-        self.assertIn(repr(n2), reps)
+        self.assertEqual(str(num_dict_2), str(dict_2))
+        self.assertEqual(repr(num_dict_2), repr(dict_2))
+        self.assertIn(repr(num_dict_2), reps)
 
         # ...however, numeric keys are not equal to numeric string keys...
         # ...so the string representations for those are different...
-        self.assertNotEqual(str(n3), str(d3))
-        self.assertNotEqual(repr(n3), repr(d3))
-        self.assertNotIn(repr(n3), reps)
+        self.assertNotEqual(str(num_dict_3), str(dict_3))
+        self.assertNotEqual(repr(num_dict_3), repr(dict_3))
+        self.assertNotIn(repr(num_dict_3), reps)
 
-        self.assertNotEqual(str(n4), str(d4))
-        self.assertNotEqual(repr(n4), repr(d4))
-        self.assertNotIn(repr(n4), reps)
+        self.assertNotEqual(str(num_dict_4), str(dict_4))
+        self.assertNotEqual(repr(num_dict_4), repr(dict_4))
+        self.assertNotIn(repr(num_dict_4), reps)
 
-        self.assertNotEqual(str(n5), str(d5))
-        self.assertNotEqual(repr(n5), repr(d5))
-        self.assertNotIn(repr(n5), reps)
+        self.assertNotEqual(str(num_dict_5), str(dict_5))
+        self.assertNotEqual(repr(num_dict_5), repr(dict_5))
+        self.assertNotIn(repr(num_dict_5), reps)
 
-        self.assertNotEqual(str(n6), str(d6))
-        self.assertNotEqual(repr(n6), repr(d6))
-        self.assertNotIn(repr(n6), reps)
+        self.assertNotEqual(str(num_dict_6), str(dict_6))
+        self.assertNotEqual(repr(num_dict_6), repr(dict_6))
+        self.assertNotIn(repr(num_dict_6), reps)
 
         # ...but None keys work just fine
-        self.assertEqual(str(n7), str(d7))
-        self.assertEqual(repr(n7), repr(d7))
-        self.assertIn(repr(n7), reps)
+        self.assertEqual(str(num_dict_7), str(dict_7))
+        self.assertEqual(repr(num_dict_7), repr(dict_7))
+        self.assertIn(repr(num_dict_7), reps)
 
     def test_rich_comparison_and_len(self):
+        """
+        Test rich comparison and length
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
 
         # Construct NumDicts from dicts
-        n = NumDict()
-        n0 = NumDict(d0)
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
+        num_dict = NumDict()
+        num_dict_0 = NumDict(dict_0)
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
 
         # Construct NumDicts from NumDicts
-        nn = NumDict(n)
-        nn0 = NumDict(n0)
-        nn1 = NumDict(n1)
-        nn2 = NumDict(n2)
+        num_dict_from_num_dict = NumDict(num_dict)
+        num_dict_from_num_dict_0 = NumDict(num_dict_0)
+        num_dict_from_num_dict_1 = NumDict(num_dict_1)
+        num_dict_from_num_dict_2 = NumDict(num_dict_2)
 
-        all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2]
-        for a in all_dicts:
-            for b in all_dicts:
-                self.assertEqual(a == b, len(a) == len(b))
+        all_dicts = [dict_0, dict_1, dict_2, num_dict, num_dict_0, num_dict_1, num_dict_2, num_dict_from_num_dict, num_dict_from_num_dict_0, num_dict_from_num_dict_1, num_dict_from_num_dict_2]
+        for val_a in all_dicts:
+            for val_b in all_dicts:
+                self.assertEqual(val_a == val_b, len(val_a) == len(val_b))
 
-    def test_dict_access_and_modification(self):
+    def test_dict_access_and_mod(self):  # pylint: disable=too-many-locals, too-many-statements
+        """
+        Test num dict access and modification
+        """
         # dicts for testing
-        d0 = {}  # Empty dictionary
-        d1 = {1: 'Elephant'}  # Single numeric key
-        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        dict_0 = {}  # Empty dictionary
+        dict_1 = {1: 'Elephant'}  # Single numeric key
+        dict_2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
 
         #  Construct NumDicts from dicts
-        n0 = NumDict()
-        n1 = NumDict(d1)
-        n2 = NumDict(d2)
+        num_dict_0 = NumDict()
+        num_dict_1 = NumDict(dict_1)
+        num_dict_2 = NumDict(dict_2)
 
         # test __getitem__
-        self.assertEqual(n2[1], 'Elephant')
+        self.assertEqual(num_dict_2[1], 'Elephant')
         with self.assertRaises(KeyError):
-            n1['Mouse']  # key is not numeric
+            _ = num_dict_1['Mouse']  # key is not numeric
         with self.assertRaises(KeyError):
-            n1.__getitem__('Mouse')  # key is not numeric
+            _ = num_dict_1.__getitem__('Mouse')  # key is not numeric
         with self.assertRaises(KeyError):
-            n1[None]  # key does not exist
+            _ = num_dict_1[None]  # key does not exist
         with self.assertRaises(KeyError):
-            n1.__getitem__(None)  # key does not exist
+            _ = num_dict_1.__getitem__(None)  # key does not exist
 
         # Test __setitem__
-        n3 = NumDict(n2)
-        self.assertEqual(n2, n3)
+        num_dict_3 = NumDict(num_dict_2)
+        self.assertEqual(num_dict_2, num_dict_3)
 
-        n3[2] = 'Frog'
-        self.assertNotEqual(n2, n3)
+        num_dict_3[2] = 'Frog'
+        self.assertNotEqual(num_dict_2, num_dict_3)
 
         # Check None keys and numeric key conversion
-        n3['3'] = 'Armadillo'
-        n3[None] = 'Cockroach'
+        num_dict_3['3'] = 'Armadillo'
+        num_dict_3[None] = 'Cockroach'
 
         # Check long ints
-        n3[12390809518259081208909880312] = 'Squid'
-        n3['12390809518259081208909880312'] = 'Octopus'
-        self.assertEqual(n3[12390809518259081208909880312], 'Octopus')
+        num_dict_3[12390809518259081208909880312] = 'Squid'
+        num_dict_3['12390809518259081208909880312'] = 'Octopus'
+        self.assertEqual(num_dict_3[12390809518259081208909880312], 'Octopus')
 
         with self.assertRaises(TypeError):
-            n3.__setitem__('Gorilla', 1)  # key is not numeric
+            num_dict_3.__setitem__('Gorilla', 1)  # key is not numeric
         with self.assertRaises(TypeError):
-            n3['Chimpanzee'] = 1  # key is not numeric
+            num_dict_3['Chimpanzee'] = 1  # key is not numeric
         with self.assertRaises(TypeError):
-            n3[(4, 1)] = 1  # key is not numeric
+            num_dict_3[(4, 1)] = 1  # key is not numeric
         with self.assertRaises(TypeError):
-            n3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
+            num_dict_3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
 
         # Test __delitem__
-        del n3[3]
-        del n3[None]
+        del num_dict_3[3]
+        del num_dict_3[None]
         with self.assertRaises(KeyError):
-            del n3[3]  # already deleted
+            del num_dict_3[3]  # already deleted
         with self.assertRaises(KeyError):
-            n3.__delitem__(3)  # already deleted
+            num_dict_3.__delitem__(3)  # already deleted
         with self.assertRaises(KeyError):
-            del n3['Mouse']  # key would not exist, since it is not numeric
+            del num_dict_3['Mouse']  # key would not exist, since it is not numeric
 
         # Test clear
-        n3.clear()
-        self.assertEqual(n3, {})
+        num_dict_3.clear()
+        self.assertEqual(num_dict_3, {})
 
         # Test copy()
-        n2a = d2.copy()
-        self.assertEqual(n2, n2a)
-        n2b = n2.copy()
-        self.assertEqual(n2b, n2)
-        n2c = UserDict({1: 'Elephant', 2: 'Mouse'})
-        n2d = n2c.copy()  # making a copy of a UserDict is special cased
-        self.assertEqual(n2c, n2d)
+        num_dict_2a = dict_2.copy()
+        self.assertEqual(num_dict_2, num_dict_2a)
+        num_dict_2b = num_dict_2.copy()
+        self.assertEqual(num_dict_2b, num_dict_2)
+        num_dict_2c = UserDict({1: 'Elephant', 2: 'Mouse'})
+        num_dict_2d = num_dict_2c.copy()  # making a copy of a UserDict is special cased
+        self.assertEqual(num_dict_2c, num_dict_2d)
 
         class MyNumDict(NumDict):
             """
@@ -316,131 +327,135 @@ class NumDictTest(unittest.TestCase):
                 """
                 print('MyNumDict:', self)
 
-        m2 = MyNumDict(n2)
-        m2a = m2.copy()
-        self.assertEqual(m2a, m2)
+        my_num_dict = MyNumDict(num_dict_2)
+        my_num_dict_a = my_num_dict.copy()
+        self.assertEqual(my_num_dict_a, my_num_dict)
 
-        m2[1] = 'Frog'
-        self.assertNotEqual(m2a, m2)
+        my_num_dict[1] = 'Frog'
+        self.assertNotEqual(my_num_dict_a, my_num_dict)
 
         # Test keys, items, values
-        self.assertEqual(sorted(n2.keys()), sorted(d2.keys()))
-        self.assertEqual(sorted(n2.items()), sorted(d2.items()))
-        self.assertEqual(sorted(n2.values()), sorted(d2.values()))
+        self.assertEqual(sorted(num_dict_2.keys()), sorted(dict_2.keys()))
+        self.assertEqual(sorted(num_dict_2.items()), sorted(dict_2.items()))
+        self.assertEqual(sorted(num_dict_2.values()), sorted(dict_2.values()))
 
         # Test "in".
-        for i in n2:
-            self.assertIn(i, n2)
-            self.assertEqual(i in n1, i in d1)
-            self.assertEqual(i in n0, i in d0)
+        for i in num_dict_2:
+            self.assertIn(i, num_dict_2)
+            self.assertEqual(i in num_dict_1, i in dict_1)
+            self.assertEqual(i in num_dict_0, i in dict_0)
 
-        self.assertFalse(None in n2)
-        self.assertEqual(None in n2, None in d2)
+        self.assertFalse(None in num_dict_2)
+        self.assertEqual(None in num_dict_2, None in dict_2)
 
-        d2[None] = 'Cow'
-        n2[None] = d2[None]
-        self.assertTrue(None in n2)
-        self.assertEqual(None in n2, None in d2)
+        dict_2[None] = 'Cow'
+        num_dict_2[None] = dict_2[None]
+        self.assertTrue(None in num_dict_2)
+        self.assertEqual(None in num_dict_2, None in dict_2)
 
-        self.assertEqual(n2.has_key(None), None in d2)
+        self.assertEqual(num_dict_2.has_key(None), None in dict_2)
         if not PY3:
-            self.assertEqual(n2.has_key(None), d2.has_key(None))
-        self.assertFalse('Penguin' in n2)
+            self.assertEqual(num_dict_2.has_key(None), dict_2.has_key(None))
+        self.assertFalse('Penguin' in num_dict_2)
 
         # Test update
-        t = NumDict()
-        t.update(d2)
-        self.assertEqual(t, n2)
+        test = NumDict()
+        test.update(dict_2)
+        self.assertEqual(test, num_dict_2)
 
         # Test get
-        for i in n2:
-            self.assertEqual(n2.get(i), n2[i])
-            self.assertEqual(n1.get(i), d1.get(i))
-            self.assertEqual(n0.get(i), d0.get(i))
+        for i in num_dict_2:
+            self.assertEqual(num_dict_2.get(i), num_dict_2[i])
+            self.assertEqual(num_dict_1.get(i), dict_1.get(i))
+            self.assertEqual(num_dict_0.get(i), dict_0.get(i))
 
         for i in ['purple', None, 12312301924091284, 23]:
-            self.assertEqual(n2.get(i), d2.get(i), i)
+            self.assertEqual(num_dict_2.get(i), dict_2.get(i), i)
 
         with self.assertRaises(AssertionError):
             i = '1'
-            self.assertEqual(n2.get(i), d2.get(i), i)  # d2 expects string key which does not exist
+            self.assertEqual(num_dict_2.get(i), dict_2.get(i), i)  # dict_2 expects string key which does not exist
 
         # Test "in" iteration.
-        n2b = n2
+        num_dict_2b = num_dict_2
         for i in range(20):
-            n2[i] = str(i)
-            n2b[str(i)] = str(i)
-        self.assertEqual(n2, n2b)
+            num_dict_2[i] = str(i)
+            num_dict_2b[str(i)] = str(i)
+        self.assertEqual(num_dict_2, num_dict_2b)
 
         ikeys = []
-        for k in n2:
+        for k in num_dict_2:
             ikeys.append(k)
-        self.assertEqual(set(ikeys), set(n2.keys()))
+        self.assertEqual(set(ikeys), set(num_dict_2.keys()))
 
         # Test setdefault
-        x = 1
-        t = NumDict()
-        self.assertEqual(t.setdefault(x, 42), 42)
-        self.assertEqual(t.setdefault(x, '42'), 42)
-        self.assertNotEqual(t.setdefault(x, 42), '42')
-        self.assertNotEqual(t.setdefault(x, '42'), '42')
-        self.assertIn(x, t)
-
-        self.assertEqual(t.setdefault(x, 23), 42)
-        self.assertEqual(t.setdefault(x, '23'), 42)
-        self.assertNotEqual(t.setdefault(x, 23), '42')
-        self.assertNotEqual(t.setdefault(x, '23'), '42')
-        self.assertIn(x, t)
+        val = 1
+        test = NumDict()
+        self.assertEqual(test.setdefault(val, 42), 42)
+        self.assertEqual(test.setdefault(val, '42'), 42)
+        self.assertNotEqual(test.setdefault(val, 42), '42')
+        self.assertNotEqual(test.setdefault(val, '42'), '42')
+        self.assertIn(val, test)
+
+        self.assertEqual(test.setdefault(val, 23), 42)
+        self.assertEqual(test.setdefault(val, '23'), 42)
+        self.assertNotEqual(test.setdefault(val, 23), '42')
+        self.assertNotEqual(test.setdefault(val, '23'), '42')
+        self.assertIn(val, test)
 
         # Test pop
-        x = 1
-        t = NumDict({x: 42})
-        self.assertEqual(t.pop(x), 42)
-        self.assertRaises(KeyError, t.pop, x)
-        self.assertEqual(t.pop(x, 1), 1)
-        t[x] = 42
-        self.assertEqual(t.pop(x, 1), 42)
+        val = 1
+        test = NumDict({val: 42})
+        self.assertEqual(test.pop(val), 42)
+        self.assertRaises(KeyError, test.pop, val)
+        self.assertEqual(test.pop(val, 1), 1)
+        test[val] = 42
+        self.assertEqual(test.pop(val, 1), 42)
 
         # Test popitem
-        x = 1
-        t = NumDict({x: 42})
-        self.assertEqual(t.popitem(), (x, 42))
-        self.assertRaises(KeyError, t.popitem)
+        val = 1
+        test = NumDict({val: 42})
+        self.assertEqual(test.popitem(), (val, 42))
+        self.assertRaises(KeyError, test.popitem)
 
     def test_missing(self):
+        """
+        Test missing keys
+        """
         # Make sure NumDict doesn't have a __missing__ method
         self.assertEqual(hasattr(NumDict, "__missing__"), False)
 
-        class D(NumDict):
+        class NumDictD(NumDict):
             """
             subclass defines __missing__ method returning a value
             """
-            def __missing__(self, key):
-                return 42
-
-        d = D({1: 2, 3: 4})
-        self.assertEqual(d[1], 2)
-        self.assertEqual(d[3], 4)
-        self.assertNotIn(2, d)
-        self.assertNotIn(2, d.keys())
-        self.assertEqual(d[2], 42)
-
-        class E(NumDict):
+            def __missing__(self, key):  # pylint: disable=no-self-use
+                key = 42
+                return key
+
+        num_dict_d = NumDictD({1: 2, 3: 4})
+        self.assertEqual(num_dict_d[1], 2)
+        self.assertEqual(num_dict_d[3], 4)
+        self.assertNotIn(2, num_dict_d)
+        self.assertNotIn(2, num_dict_d.keys())
+        self.assertEqual(num_dict_d[2], 42)
+
+        class NumDictE(NumDict):
             """
             subclass defines __missing__ method raising RuntimeError
             """
-            def __missing__(self, key):
+            def __missing__(self, key):  # pylint: disable=no-self-use
                 raise RuntimeError(key)
 
-        e = E()
+        num_dict_e = NumDictE()
         try:
-            e[42]
+            num_dict_e[42]
         except RuntimeError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("e[42] didn't raise RuntimeError")
+            self.fail("num_dict_e[42] didn't raise RuntimeError")
 
-        class F(NumDict):
+        class NumDictF(NumDict):
             """
             subclass sets __missing__ instance variable (no effect)
             """
@@ -448,40 +463,43 @@ class NumDictTest(unittest.TestCase):
                 # An instance variable __missing__ should have no effect
                 self.__missing__ = lambda key: None
                 NumDict.__init__(self)
-        f = F()
+        num_dict_f = NumDictF()
         try:
-            f[42]
+            num_dict_f[42]
         except KeyError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("f[42] didn't raise KeyError")
+            self.fail("num_dict_f[42] didn't raise KeyError")
 
-        class G(NumDict):
+        class NumDictG(NumDict):
             """
             subclass doesn't define __missing__ at a all
             """
             pass
 
-        g = G()
+        num_dict_g = NumDictG()
         try:
-            g[42]
+            num_dict_g[42]
         except KeyError as err:
             self.assertEqual(err.args, (42,))
         else:
-            self.fail("g[42] didn't raise KeyError")
+            self.fail("num_dict_g[42] didn't raise KeyError")
 
-        class H(D):
+        class NumDictH(NumDictD):
             """
             subclass calls super classes __missing__ and modifies the value before returning it
             """
-            def __missing__(self, key):
-                return super(H, self).__missing__(key) + 1
+            def __missing__(self, key):  # pylint: disable=arguments-differ
+                return super(NumDictH, self).__missing__(key) + 1
 
-        h = H()
-        self.assertEqual(h[None], d[None]+1)
+        num_dict_h = NumDictH()
+        self.assertEqual(num_dict_h[None], num_dict_d[None]+1)
 
 
 def test_main():
+    """
+    Run tests when run as main
+    """
     import logging
     log = logging.getLogger(__name__)
     logging.basicConfig(level=logging.DEBUG)