具有单键和两个值的Python存储列表

2024-10-03 23:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用下面的代码部分

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

生成组合列表

^{pr2}$

我想将这些组合作为两个值的键: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排序函数的数据结构?


编辑:我想我应该扩展上面的例子。我想将(0,1,2)存储为键7,这个键有两个值: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

Tags: key代码in数据结构列表for排序value
3条回答

Is there any good data structure to store the data above?

^{}

How can I convert (0,) into a key (of string) ?

你其实不需要。由于(0,)是一个元组,并且元组是可散列的,所以它可以直接用作键。在

I'd also need to sort the list by kweight later on, is it possible to use a data structure which can call some python sort function?

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

可以使用嵌套dict或创建value对象。在

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

或者

^{pr2}$

你基本上生成了2^n-1个数字,其中n是num_项。。 所以你可以使用位操作来得到上面的结果。在

将i从0迭代到2^n-1:
查找i的二进制:
检查每个设定位,位的位置(从1开始)将给出您想要的组合。在

相关问题 更多 >