从对象中的属性中获取随机元素

时间:2015-08-23 11:39:11

标签: python object random attributes

我有一个对象,它有16个双重属性,我想随机选择其中一个,所以我创建了一个方法,在0-15之间创建一个随机数,但这种方法并不是我想要的,我认为它是&#39 ;如果你们有另一个最干净的方法,那就是一个非常脏的方法

cellForRowAtIndexPath

1 个答案:

答案 0 :(得分:2)

您只需从vars(self) dictionary中选择一个随机属性,过滤与模式匹配的名称:

def getRandomRate(self):
    return random.choice([v for attr, v in vars(self).items()
                          if len(attr) == 8 and attr[3:5] == 'To'])

这会从名称长度为8个字符的所有属性中选择一个随机值,并在中间包含单词To

使用您班级的简短演示:

>>> import random
>>> c = Currencies()
>>> vars(c)
{'EURToBTC': u'0.0108027', 'BTCToJPY': u'12816.8350063', 'JPYToJPY': 1.0, 'USDToBTC': u'0.0094131', 'JPYToBTC': u'0.0000702', 'BTCToUSD': u'125.2057142', 'USDToUSD': 1.0, 'USDToJPY': u'116.1736146', 'EURToEUR': 1.0, 'JPYToUSD': u'0.0084464', 'BTCToEUR': u'92.3549138', 'USDToEUR': u'0.8820255', 'BTCToBTC': 1.0, 'JPYToEUR': u'0.0065705', 'EURToUSD': u'1.2338648', 'EURToJPY': u'126.4193644'}
>>> [v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To']
[u'0.0108027', u'12816.8350063', 1.0, u'0.0094131', u'0.0000702', u'125.2057142', 1.0, u'116.1736146', 1.0, u'0.0084464', u'92.3549138', u'0.8820255', 1.0, u'0.0065705', u'1.2338648', u'126.4193644']
>>> random.choice([v for attr, v in vars(c).items() if len(attr) == 8 and attr[3:5] == 'To'])
u'0.0108027'

因此,列表理解为每个转化率提取了16个值,然后random.choice()随机选择其中一个。