Python存储列表包含单个键和两个值

时间:2013-06-25 11:46:06

标签: python python-2.7

我使用下面的代码部分

num_item = 3
for i in range(1,num_item+1):
   list(itertools.combinations(range(0,num_item), i))

生成组合列表

[[(0,), (1,), (2,)], [(0, 1), (0, 2), (1, 2)], [(0, 1, 2)]]

我想将这些组合作为两个值的关键:kvalue和kweight,如下例所示

key 1 : (0,)   , value 1 : kvalue = 8  kweight = 4
key 2 : (1,)   , value 2 : kvalue = 10  kweight = 5
key 3 : (2,)   , value 3 : kvalue = 15  kweight = 8
  1. 上面存储数据有什么好的数据结构吗?

  2. 如何将(0,)转换为(字符串)键?

  3. 我还需要稍后用kweight对列表进行排序,是否可以使用可调用某些python排序函数的数据结构?


  4. 编辑:我想我应该扩展上面的例子。我想将(0,1,2)存储为键7,该键有2个值:kvalue = -1,kweight = 9

    key 1 : (0,)   , value 1 : kvalue = 8  kweight = 4
    key 2 : (1,)   , value 2 : kvalue = 10  kweight = 5
    key 3 : (2,)   , value 3 : kvalue = 15  kweight = 8
    key 4 : (0, 1) , value 4 : kvalue = 18  kweight = 9
    key 5 : (0, 2) , value 5 : kvalue = -1  kweight = 4
    key 6 : (1, 2) , value 6 : kvalue = -1  kweight = 5
    key 7 : (0, 1, 2) , value 7 : kvalue = -1  kweight = 9
    

3 个答案:

答案 0 :(得分:4)

  

上面存储数据是否有良好的数据结构?

collections.namedtuple

  

如何将(0,)转换为键(字符串)?

你实际上并不需要。由于(0,)是一个元组,而元组是可清除的,因此它可以直接用作密钥。

  

我还需要稍后用kweight对列表进行排序,是否可以使用可以调用某些python排序函数的数据结构?

sorted(dictofnamedtuples.values(), key=operator.attrgetter('kweight'))

答案 1 :(得分:1)

您可以使用嵌套字典或创建值对象。

{0:{'value':1, 'kvalue':8, 'kweight':4}}

class Value:

    def __init__(self, value, kvalue, kweight):
        self.value = value
        self.kvalue = kvalue
        self.kweight = kweight

{0:Value(1,8,4)}

答案 2 :(得分:-1)

你基本上生成2 ^ n - 1个数字,其中n是num_item .. 因此,您可以使用位操作来获得上述结果。

迭代i从0到2 ^ n - 1:
找到i的二进制:
检查每个设置位,该位的位置(从1开始)将为您提供所需的组合。