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