Python 自动化问题
我有不同的格言:Python 自动化问题,python,Python,我有不同的格言: p1 = {'pair1': ([2, 3, 4], [5, 6, 7])} p2 = {'pair2': ([9, 10, 11], [12, 13, 14])} p3 = {'pair3': ([12, 20, 30], [17, 8, 30])} 我想计算(使用保存的结果): 我想定义一个函数,它计算每个pair1、pair2、pair3、pair4的平均值并保存结果 得到结果并不难,我想把结果保存在每一篇文章中。。尝试了几个小时,从未工作目前编
p1 = {'pair1': ([2, 3, 4], [5, 6, 7])}
p2 = {'pair2': ([9, 10, 11], [12, 13, 14])}
p3 = {'pair3': ([12, 20, 30], [17, 8, 30])}
我想计算(使用保存的结果):
我想定义一个函数,它计算每个pair1、pair2、pair3、pair4的平均值并保存结果
得到结果并不难,我想把结果保存在每一篇文章中。。尝试了几个小时,从未工作目前编写的问题是,函数无法知道键名
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
我想详细介绍一下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
到目前为止你试过什么?它是如何工作的?它做了什么?你有错误吗?发布完整的回溯。尝试了几个小时,从未奏效。。。几个小时?真正地奇怪,它还不起作用。。。(对不起,是你自找的。)谢谢!您将如何组织代码?我有50对,我需要在这些对上应用20个函数,这些函数的结果会自动添加到相应的对中,例如,平均值、相关性、滚动相关性等。您愿意使用这样的函数吗<代码>对={'pair1':([2,3,4],[5,6,7]),'pair2':([9,10,11],[12,13,14]),'pair3':([5,9,10],[8,9,2])我在上面添加了一个对象的示例。将太多数据结构嵌套在彼此内部的问题是,很难记住如何访问这些数字,也很难进行调试。您可以像上面的示例中那样将相关性编程为类函数。您仍然可以将对象存储在字典中,如:pairs['pair5']=PairObject([3,5],[7,8])@user21988如果您有许多类似的对象都需要以相同的方式处理,首先想到的是使用列表并将处理应用于其中的所有元素。如果您需要通过名称访问单个对象,您可以将它们放在dict中,如您给出的示例所示;但是,如果您的密钥都是
pair[n]
格式,这与使用列表并通过索引访问元素没有什么区别。。。
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