--- action.py	(original)
+++ action.py	(refactored)
@@ -166,9 +166,9 @@
 
     def create_action_with_users_sub_menu(self, parent_menu, title, action, image_name):
         debug_print("create_action_with_users_sub_menu - self.users=", self.users)
-        debug_print("create_action_with_users_sub_menu - self.users.keys()=", self.users.keys())
-        debug_print("create_action_with_users_sub_menu - len(self.users.keys())=", len(self.users.keys()))
-        if len(self.users.keys()) > 1:
+        debug_print("create_action_with_users_sub_menu - self.users.keys()=", list(self.users.keys()))
+        debug_print("create_action_with_users_sub_menu - len(self.users.keys())=", len(list(self.users.keys())))
+        if len(list(self.users.keys())) > 1:
             # If we have more than one user, define a sub-menu with user names
             sub_menu = parent_menu.addMenu(get_icon(image_name), title)
             sub_menu.setStatusTip(title)
@@ -187,7 +187,7 @@
                                          triggered=triggered_action)
         else:
             # No user submenu so just have the action directly
-            user_name = self.users.keys()[0]
+            user_name = list(self.users.keys())[0]
             unique_name = 'User "%s" %s' % (user_name, title)
             if action in ['add','remove']:
                 triggered_action = partial(self.add_or_remove_to_shelf, action, user_name)
@@ -209,7 +209,7 @@
                 user_sub_menu.setStatusTip(user_sub_menu.title())
                 self.create_sub_menu_for_shelves_action(user_sub_menu, user_name, title, action)
         else:
-            user_name = self.users.keys()[0]
+            user_name = list(self.users.keys())[0]
             self.create_sub_menu_for_shelves_action(sub_menu, user_name, title, action)
 
     def create_sub_menu_for_shelves_action(self, parent_menu, user_name, title, action):
@@ -244,7 +244,7 @@
                                    _('Add book to shelves represented by your tags'), is_download=False,
                                    unique_name='User "%s" Upload tags as shelves' % (user_name,))
         else:
-            user_name = self.users.keys()[0]
+            user_name = list(self.users.keys())[0]
             self.create_shelves_tags_action(parent_menu, user_name, _('Download tags from shelves'), 'images/tags_download.png',
                                    _('Download shelves your book is on as tags'), is_download=True)
             self.create_shelves_tags_action(parent_menu, user_name, _('Upload tags as shelves'), 'images/tags_upload.png',
@@ -817,7 +817,7 @@
                 current_shelves = []
             calibre_tags = self._get_calibre_tags_for_book(db, calibre_id, tag_column, tag_column_label, is_multiple)
             for calibre_tag in calibre_tags:
-                for shelf_name, mapped_tag_values in tag_mappings.items():
+                for shelf_name, mapped_tag_values in list(tag_mappings.items()):
                     if calibre_tag not in mapped_tag_values:
                         continue
                     if len(mapped_tag_values) > 1:
