如何将值分配到字典
问题描述:
我正在创建一个函数,该函数应该返回带有来自不同列表的键和值的字典。但是我在获得列表中的数字作为字典的值时遇到了问题。但是,我认为我正确地获得了钥匙。 这是我得到迄今:如何将值分配到字典
def exp (magnitudes,measures):
"""return for each magnitude the associated mean of numbers from a list"""
dict_expe = {}
for mag in magnitudes:
dict_expe[mag] = 0
for mea in measures:
summ = 0
for n in mea:
summ += n
dict_expe[mag] = summ/len(mea)
return dict_expe
print(exp(['mag1', 'mag2', 'mag3'], [[1,2,3],[3,4],[5]]))
输出应该是:
{mag1 : 2, mag2: 3.5, mag3: 5}
但是我得到总是5是所有键的值。我想过zip()方法,但我试图避免它,因为它需要在这两个列表中的相同长度。
答
序列的平均值为sum(sequence)/len(sequence)
,所以您需要遍历magnitudes
和measures
,计算这些平均值(算术平均值)并将其存储在字典中。
还有更多pythonic方式可以实现这一点。所有这些例子都产生了{'mag1': 2.0, 'mag2': 3.5, 'mag3': 5.0}
。
使用for i in range()
循环:
def exp(magnitudes, measures):
means = {}
for i in range(len(magnitudes)):
means[magnitudes[i]] = sum(measures[i])/len(measures[i])
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
但是如果你需要一个列表的两个指数和值,您可以使用for i, val in enumerate(sequence)
的做法,是更适合在这种情况下:
def exp(magnitudes, measures):
means = {}
for i, mag in enumerate(magnitudes):
means[mag] = sum(measures[i])/len(measures[i])
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
另一个问题兽皮这里:i
索引所属的magnitudes
,但我们也使用它从measures
获取值,如果您有magnitudes
和,这对您的情况不是什么大问题长度相同,但如果magnitudes
会更大,您将获得IndexError
。因此,在我看来,喜欢使用zip
函数是什么将是这里的最佳选择(实际上,因为python3.6它不需要两个列表是相同的长度,它将只使用最短的长度作为长度结果):
def exp(magnitudes, measures):
means = {}
for mag, mes in zip(magnitudes, measures):
means[mag] = sum(mes)/len(mes)
return means
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))
可以随意使用哪个适合你的要求,这一个你喜欢的,不要忘记添加文档字符串的例子。
更有可能的是,你不需要例如Python的方式,但是当字典解析进场也可以是更短:
def exp(magnitudes, measures):
return {mag: sum(mes)/len(mes) for mag, mes in zip(magnitudes, measures)}
print(exp(['mag1', 'mag2', 'mag3'], [[1, 2, 3], [3, 4], [5]]))