diff --git a/gstlal-inspiral/bin/gstlal_inspiral b/gstlal-inspiral/bin/gstlal_inspiral
index 39892b89c74e6378ae1c701fee182eb4b65df9d9..c7d00de1af6fbb00ba8a8d668d913df0087fa87b 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral
+++ b/gstlal-inspiral/bin/gstlal_inspiral
@@ -801,7 +801,7 @@ for output_file_number, (svd_bank_url_dict, output_url, ranking_stat_output_url,
 
 	@bottle.route("/bank.txt")
 	def get_filter_length_and_chirpmass(banks = banks):
-		bank = banks.values()[0][0] #FIXME maybe shouldn't just take the first ones
+		bank = list(banks.values())[0][0] #FIXME maybe shouldn't just take the first ones
 		yield '%.14g %.4g %.4g' % (float(inspiral.now()), bank.filter_length, bank.sngl_inspiral_table[0].mchirp)
 
 
diff --git a/gstlal-inspiral/bin/gstlal_inspiral_calc_snr b/gstlal-inspiral/bin/gstlal_inspiral_calc_snr
index 6ed5d3af91ec7d0947651532a8c53fe62f885944..f3acf6a457d18a09470356c0927b7b1b45c7b9fb 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral_calc_snr
+++ b/gstlal-inspiral/bin/gstlal_inspiral_calc_snr
@@ -389,7 +389,7 @@ else:
 # Choose to optionally reconstruct segments around chosen segement.
 # Reconstruct segment around injections is disable.
 # if options.injections:
-#	offset_padding = max(math.ceil(abs(row.end))+1 for bank in banks_dict.values()[0] for row in bank.sngl_inspiral_table)
+#	offset_padding = max(math.ceil(abs(row.end))+1 for bank in list(banks_dict.values())[0] for row in bank.sngl_inspiral_table)
 #	reconstruction_segment_list = simulation.sim_inspiral_to_segment_list(options.injections, pad = offset_padding)
 if options.reconstruction_segment:
 	reconstruction_segment_list = segments.segmentlist()
@@ -516,9 +516,9 @@ if options.coinc_output != None:
 		raise ValueError("--time-slide-file names %s but have channel names for %s" % (", ".join(sorted(all_instruments)), ", ".join(sorted(gw_data_source_info.channel_dict))))
 
 	# Load template ids and horizon_factors
-	sngl_inspiral_table = banks_dict.values()[0][options.bank_number or 0].sngl_inspiral_table.copy()
+	sngl_inspiral_table = list(banks_dict.values())[0][options.bank_number or 0].sngl_inspiral_table.copy()
 	horizon_factors = {}
-	for bank in banks_dict.values()[0]:
+	for bank in list(banks_dict.values())[0]:
 		sngl_inspiral_table.extend(bank.sngl_inspiral_table)
 		horizon_factors.update(bank.horizon_factors)
 	template_ids = frozenset(row.template_id for row in sngl_inspiral_table)
@@ -567,7 +567,7 @@ if options.coinc_output != None:
 		pipeline,
 		coincs_document,
 		rankingstat,
-		banks_dict.values()[0][options.bank_number].horizon_distance_func,
+		list(banks_dict.values())[0][options.bank_number].horizon_distance_func,
 		gracedbwrapper = inspiral.GracedBWrapper(
 			rankingstat.instruments,
 			far_threshold = options.gracedb_far_threshold,
diff --git a/gstlal-inspiral/bin/gstlal_inspiral_lvalert_snrtimeseries_plotter b/gstlal-inspiral/bin/gstlal_inspiral_lvalert_snrtimeseries_plotter
index 344db0c75fc397f442811faf315b7d5332a2f683..fc41de0739fb7d9615e7ffa4a4be72155292970c 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral_lvalert_snrtimeseries_plotter
+++ b/gstlal-inspiral/bin/gstlal_inspiral_lvalert_snrtimeseries_plotter
@@ -129,10 +129,10 @@ for gid in gid_list:
 	# # Find the template (to retrieve the autocorrelation later)
 	#
 	banknum = None
-	for i, bank in enumerate(banks.values()[0]):
+	for i, bank in enumerate(list(banks.values())[0]):
 		for j, row in enumerate(bank.sngl_inspiral_table):
 			# The templates should all have the same template_id, so just grab one
-			if row.Gamma0 == eventid_trigger_dict.values()[0].Gamma0:
+			if row.Gamma0 == list(eventid_trigger_dict.values())[0].Gamma0:
 				banknum = i
 				tmpltnum = j
 				break
diff --git a/gstlal-inspiral/bin/gstlal_inspiral_plot_snr b/gstlal-inspiral/bin/gstlal_inspiral_plot_snr
index f196483b87d96cac6115517981f7b5e41b208320..11c332730d322372273501dc9358f2ddd39eb0f5 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral_plot_snr
+++ b/gstlal-inspiral/bin/gstlal_inspiral_plot_snr
@@ -87,7 +87,7 @@ if len(snrs_groups) != len(acs_groups):
 #
 #=============================================================================================
 # This is only useful when SNRs are complex time series.
-if numpy.iscomplexobj(SNRs_dict.values()[0][0].data.data):
+if numpy.iscomplexobj(list(SNRs_dict.values())[0][0].data.data):
 	row = 0
 	for snrs_group, acs_group in zip(snrs_groups, acs_groups):
 		figure = plotsnr.plot_snr_with_ac(dict(zip(SNRs_dict.keys(), zip(snrs_group))), dict(zip(autocorrelations_dict.keys(), zip(acs_group))),  width = options.width, ref_trigger_time = options.center, verbose = options.verbose)
diff --git a/gstlal-inspiral/bin/gstlal_inspiral_rate_posterior b/gstlal-inspiral/bin/gstlal_inspiral_rate_posterior
index ef28e6d069acf2bef3c0a2dabe452393e2b82db3..336bc07d873acf4391960c98447c0816991221ea 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral_rate_posterior
+++ b/gstlal-inspiral/bin/gstlal_inspiral_rate_posterior
@@ -314,7 +314,7 @@ if options.verbose and credible_intervals is not None:
 	print >>sys.stderr, "rate posterior mean = %g signals/experiment" % rate_estimation.mean_from_lnpdf(signal_rate_ln_pdf)
 	print >>sys.stderr, "rate posterior median = %g signals/experiment" % rate_estimation.median_from_lnpdf(signal_rate_ln_pdf)
 	# all modes are the same, pick one and report it
-	print >>sys.stderr, "maximum-likelihood rate = %g signals/experiment" % credible_intervals.values()[0][0]
+	print >>sys.stderr, "maximum-likelihood rate = %g signals/experiment" % list(credible_intervals.values())[0][0]
 	for cred, (mode, lo, hi) in sorted(credible_intervals.items()):
 		print >>sys.stderr, "%g%% credible interval = [%g, %g] signals/experiment" % (cred * 100., lo, hi)
 
diff --git a/gstlal-inspiral/bin/gstlal_inspiral_recalc_likelihood_with_zerolag b/gstlal-inspiral/bin/gstlal_inspiral_recalc_likelihood_with_zerolag
index 7f9661f0ce93c60bf4754eec6614e1ee48c3f037..e88e3d4863322de763b3cbf5c08b7b3e07c475f7 100755
--- a/gstlal-inspiral/bin/gstlal_inspiral_recalc_likelihood_with_zerolag
+++ b/gstlal-inspiral/bin/gstlal_inspiral_recalc_likelihood_with_zerolag
@@ -294,7 +294,7 @@ def get_subbank_maps(svd_banks, options):
 	subbank_likelihood_file_map_index = {}
 	for svd_bank in svd_banks:
 		bank_id = None
-		banks = inspiral.parse_bank_files(svd_bank, verbose = options.verbose).values()[0]
+		banks = list(inspiral.parse_bank_files(svd_bank, verbose = options.verbose).values())[0]
 		for bank in banks:
 			#
 			# Create a dict keyed by bank id and populated by a
diff --git a/gstlal-inspiral/bin/gstlal_ll_inspiral_event_plotter b/gstlal-inspiral/bin/gstlal_ll_inspiral_event_plotter
index f2d743001303ef7cd409b1016a63902d39f6d969..64bea8485068debb6a388560387f8173a5c7936b 100755
--- a/gstlal-inspiral/bin/gstlal_ll_inspiral_event_plotter
+++ b/gstlal-inspiral/bin/gstlal_ll_inspiral_event_plotter
@@ -404,7 +404,7 @@ class EventPlotter(events.EventProcessor):
 		# # Find the template (to retrieve the autocorrelation later)
 		#
 		banknum = None
-		for i, bank in enumerate(banks.values()[0]):
+		for i, bank in enumerate(list(banks.values())[0]):
 			for j, row in enumerate(bank.sngl_inspiral_table):
 				# The templates should all have the same template_id, so just grab one
 				if row.Gamma0 == eventid_trigger_dict.values()[0].Gamma0:
diff --git a/gstlal-inspiral/python/stats/inspiral_extrinsics.py b/gstlal-inspiral/python/stats/inspiral_extrinsics.py
index 65855f9a86cadc6af2c6175867304803c6f3e9c4..85b8b41652cd3152beb3c1a36a37994bdafac3b1 100644
--- a/gstlal-inspiral/python/stats/inspiral_extrinsics.py
+++ b/gstlal-inspiral/python/stats/inspiral_extrinsics.py
@@ -1714,8 +1714,8 @@ class p_of_instruments_given_horizons(object):
 			# NOTE we end up clipping any value outside of our
 			# histogram to just be the value in the last(first)
 			# bin, so we track those center values here.
-			self.first_center = self.histograms.values()[0].centres()[0][0]
-			self.last_center = self.histograms.values()[0].centres()[0][-1]
+			self.first_center = list(self.histograms.values())[0].centres()[0][0]
+			self.last_center = list(self.histograms.values())[0].centres()[0][-1]
 
 			# Now we start the monte carlo simulation of a bunch of
 			# signals distributed uniformly in the volume of space
diff --git a/gstlal-ugly/bin/gstlal_inspiral_activation_counts_aggregator b/gstlal-ugly/bin/gstlal_inspiral_activation_counts_aggregator
index 21928c00453d3b48d6006d1a0ecc8ca61dd2592e..e845012778e010a08dba86e50395b62a843b5487 100755
--- a/gstlal-ugly/bin/gstlal_inspiral_activation_counts_aggregator
+++ b/gstlal-ugly/bin/gstlal_inspiral_activation_counts_aggregator
@@ -34,7 +34,7 @@ class AcCounts(object):
 
 	def normalize(self):
 		# FIXME this does no error checking that category keys are consistent
-		self.norm = dict((cat, 0.) for cat in self.counts.values()[0].keys())
+		self.norm = dict((cat, 0.) for cat in list(self.counts.values())[0].keys())
 		for b in self.counts:
 			for cat in self.norm:
 				self.norm[cat] += self.counts[b][cat]
diff --git a/gstlal-ugly/bin/gstlal_inspiral_calc_likelihood_by_bin b/gstlal-ugly/bin/gstlal_inspiral_calc_likelihood_by_bin
index baa2c57a98976a392bb8cdf1f7ba376ca47bd3ac..e0bbd5b2628917303133b1aad12d3f2ad2901755 100755
--- a/gstlal-ugly/bin/gstlal_inspiral_calc_likelihood_by_bin
+++ b/gstlal-ugly/bin/gstlal_inspiral_calc_likelihood_by_bin
@@ -136,7 +136,7 @@ if __name__ == '__main__':
 	#rankingstats = dict(p.map(process_dist_stats, options.likelihood_urls))
 	rankingstats = dict(map(process_dist_stats, sorted(options.likelihood_urls)))
 
-	instruments = rankingstats.values()[0].instruments
+	instruments = list(rankingstats.values())[0].instruments
 
 	def ln_lr_from_triggers(events, offsetvector, rankingstats = rankingstats):
 		reference = min(events, key = lambda event: event.end)
diff --git a/gstlal-ugly/python/metric.py b/gstlal-ugly/python/metric.py
index 7d9040080bb1f2c40936b9329db40ccd44482051..8695a7df79ce47f81c1b9c955e6a1b01a87cdc74 100644
--- a/gstlal-ugly/python/metric.py
+++ b/gstlal-ugly/python/metric.py
@@ -220,7 +220,7 @@ class Metric(object):
 		self.flow = flow
 		self.fhigh = fhigh
 		self.working_length = int(round(self.duration * 2 * self.fhigh)) + 1
-		self.psd = reference_psd.interpolate_psd(series.read_psd_xmldoc(ligolw_utils.load_filename(psd_xml, verbose = True, contenthandler = series.PSDContentHandler)).values()[0], self.df)
+		self.psd = reference_psd.interpolate_psd(list(series.read_psd_xmldoc(ligolw_utils.load_filename(psd_xml, verbose = True, contenthandler = series.PSDContentHandler)).values())[0], self.df)
 		self.revplan = lal.CreateReverseCOMPLEX16FFTPlan(self.working_length, 1)
 		self.delta_t = DELTA
 		self.t_factor = numpy.exp(-2j * numpy.pi * (numpy.arange(self.working_length) * self.df - self.fhigh) * self.delta_t)
diff --git a/gstlal/python/plots/psd.py b/gstlal/python/plots/psd.py
index ef7d531bac2f2a89a0409a329f1b9bdec804237e..04f8889259b13cc36912029c225b1d90d293c422 100644
--- a/gstlal/python/plots/psd.py
+++ b/gstlal/python/plots/psd.py
@@ -50,8 +50,8 @@ def summarize_coinc_xmldoc(coinc_xmldoc):
 	#process, = lsctables.ProcessTable.get_table(coinc_xmldoc)
 	sngl_inspirals = dict((row.ifo, row) for row in lsctables.SnglInspiralTable.get_table(coinc_xmldoc))
 
-	mass1 = sngl_inspirals.values()[0].mass1
-	mass2 = sngl_inspirals.values()[0].mass2
+	mass1 = list(sngl_inspirals.values())[0].mass1
+	mass2 = list(sngl_inspirals.values())[0].mass2
 	if mass1 < mass2:
 		mass1, mass2 = mass2, mass1
 	end_time = coinc_inspiral.end