关于在python 3k中管理具有多个子值的值的问题

时间:2011-01-04 06:23:50

标签: python python-3.x

我有一个问题,我将如何在python中执行以下任务。 (我使用python 3k)

我所拥有的是几个可以在这些变量之上产生更多变量的变量 而且每个人都有更多的变数 例如:

通用名称是

item_version_type =

其中每个部分(项目,版本和类型)引用不同的变量(这里每个部分有3个)

item = item_a, item_b, item_c
version = range(1,3)
itemtype = itemtype_a, itemtype_b, itemtype_c

简单地列出每个名称并定义它很烦人:

itema_ver1_typea = 
itemb_ver1_typea = 
itemc_ver1_typea =
itema_ver2_typea = 
etc.
etc.
etc.

特别是当我有一个变量依赖于其他东西的东西时 例如:

if value == True:
    version = ver + 1

并且最重要的是,整个例子简单地与我实际相比 与...合作。

我很好奇的一件事是使用多个“。”类的类型如:

item.version.type

我知道这可以做到 我只是无法弄清楚如何获得一个有多个点的类

或者如果有人能指出我更好的方法

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

这样的数据分组可以在Python中以三种方式完成。

第一种方式是元组:

myvariable = ('Sammalamma', 1, 'Text')

第二种方式是字典:

myvariable = {'value': 'Sammalamma', 'version': 1, 'type': 'Text'}

第三种方式是一个班级:

 class MyClass(object):
     def __init__(self, value, version, type):
          self.value = value
          self.version = version
          self.type = type

 >>> myvariable = MyClass('Sammalamma', 1, 'Text')
 >>> myvariable.value
 'Sammalamma'
 >>> myvariable.version
 1
 >>> myvariable.type
 'Text'

在每种情况下使用哪一个取决于你,虽然在这种情况下我会声称元组似乎不是最好的选择,我会去字典或类。

这些都不是Python 3独有的,它适用于任何版本的Python。

答案 1 :(得分:1)

@Lennart Regebro's answer之外,如果项目是不可变的:

import collections

Item = collections.namedtuple('Item', 'value version type')

items = [Item(val, 'ver'+ver, t)
         for val in 'abc' for ver in '12' for t in ['typea']]      
print(items[0])
# -> Item(value='a', version='ver1', type='typea')
item = items[1]
print(item.value, item.type)
# -> b typea

答案 2 :(得分:0)

很抱歉在这里发布此内容而不是评论,但我不知道如何在这里工作。

澄清

我需要的是基本上能够获得所谓的输出等 我可以采取广泛的区域(项目)进一步缩小它(版本)甚至更远(类型的项目类型,如让我们说类型是勺子,刀,叉)

或更好的描述就像arm.left.lower =左下臂 我也可能喜欢leg.left.lower

所以我可以用arm.both.upper来获得左右上臂 其中一个值将分配给两者。

我需要的是能够进行真值测试等并让它返回允许的值 比如

如果leg == True

输出是 - > leg.both.lower,leg.both.upper,leg.left.upper leg.right.upper等等。

如果upper == True

输出是 - > leg.both.upper,leg.left.upper等等。

希望有帮助

基本上我知道如何获得像item.version这样的东西,但我如何得到一些东西 比如item.version.type

我需要让它更具体而不仅仅是item.version 我需要能够判断项目是否为此,版本是那个类型将是x

像 item.version.type

if version == 3:
    item.version = spoon.3.bent
#which is different from
if version == 2:
    item.version.type = spoon.2.bent