我有不同的说法:
p1 = {'pair1': ([2, 3, 4], [5, 6, 7])}
p2 = {'pair2': ([9, 10, 11], [12, 13, 14])}
p3 = {'pair3': ([12, 20, 30], [17, 8, 30])}
我想计算(使用保存的结果):
p1['mean']=np.mean(p1['pair1'])
print p1
{'pair1': ([2, 3, 4], [5, 6, 7]), 'mean': 4.5}
我想定义一个函数来计算每个pair1,pair2,pair3,pair4的平均值并保存结果。
获得结果并不困难,我想在每个字典中保存结果。试了几个小时,从未工作
答案 0 :(得分:0)
目前编写的问题的问题是函数无法知道密钥名称pair1
,因为每个字典都有所不同。
您可以为每个字典使用一致的密钥名称,例如pair
:
p1 = {'pair': ([2, 3, 4], [5, 6, 7])}
p2 = {'pair': ([9, 10, 11], [12, 13, 14])}
p3 = {'pair': ([12, 20, 30], [17, 8, 30])}
def find_and_set_mean(a_dictionary):
a_dictionary['mean']=np.mean(a_dictionary['pair'])
find_and_set_mean(p1)
find_and_set_mean(p2)
find_and_set_mean(p3)
给出:
{'pair': ([2, 3, 4], [5, 6, 7]), 'mean': 4.5}
{'pair': ([9, 10, 11], [12, 13, 14]), 'mean': 11.5}
{'pair': ([12, 20, 30], [17, 8, 30]), 'mean': 19.5}
但更好的解决方案可能是将其组织为对象:
class PairObject(object):
def __init__(self, _part1, _part2):
self.part1 = _part1
self.part2 = _part2
def pair(self):
return (self.part1, self.part2)
def mean(self):
return np.mean((self.part1, self.part2))
# Then use it like this:
p1 = PairObject([2, 3, 4], [5, 6, 7])
p1.pair() # returns ([2, 3, 4], [5, 6, 7])
p1.mean() # returns 4.5
答案 1 :(得分:0)
我想详细说明Justin的OO解决方案:
def mean (self)
的问题在于每次访问时都会重新计算。您可能希望将此属性设置为惰性,即在首次访问时将其计算并将其存储以供将来参考。
这样的事情:
class PairObject:
def __init__(self, part1, part2):
self._pair = (part1, part2)
self._mean = None
@property
def pair(self):
return self._pair
@property
def mean(self):
if self._mean == None: self._mean = np.mean(self._pair)
#explicit test for None, as e.g. a mean of 0 also is falsy
return self._mean
# Then use it like this:
pairs = [PairObject ([2, 3, 4], [5, 6, 7]),
PairObject ([9, 10, 11], [12, 13, 14]),
PairObject ([12, 20, 30], [17, 8, 30]) ]
for p in pairs:
print p.pair
print p.mean