如何从python字典中提取列表并将其作为dict值附加到具有字典列表的列表中?

问题描述

z是dict()的列表。

void printList(List &source,bool forward){

  ListItr itr;

  if(forward)
  {
    itr = ListItr(source.first());

    while(!itr.isPastEnd())
    {
      cout << itr.retrieve() << " ";

      itr.moveForward();
    }

  }
  else
  {
    itr = ListItr(source.last());

    while(!itr.isPastBeginning())
    {
      cout << itr.retrieve() << " ";

      itr.moveBackward();
    }

  }

  cout << endl;

}

我想将所有'loss'的字典值添加到单独的列表中,并类似地添加'val_loss','accuracy','val_accuracy'。 为此,我尝试编写以下python代码

z = [{'loss': [1,2,2],'val_loss':[2,4,5],'accuracy':[3,8,9],'val_accuracy':[5,9,7]},{'loss': [1,]

但是当我尝试打印列表a = b = c = d = [] for lis in z: a.append(lis['loss']) b.append(lis['val_loss']) c.append(lis['accuracy']) d.append(lis['val_accuracy']) 的长度时,输出是40而不是10?

我只想将所有print(len(a))附加到'loss'中。

解决方法

符号StopAsynca = b = c = d = []分配了一个新列表,然后为d分配了3个其他变量,因此,您有4个变量指向一个相同的列表,因此将4 *同一列表中有10个项目。

做:

d

您可以使用a,b,c,d = [],[],[] map

itemgetter
,

在python中,创建变量时,您只是在创建指向对象的指针,而不是对象的副本。在这种情况下,使用a = b = c = d = []初始化列表时,实际上是使a,b,c和d指向同一列表,而不是创建四个不同的列表。

采用以下示例:

In [1]: a = b = c = d = []                                                      

In [2]: a.append("a")                                                           

In [3]: b                                                                       
Out[3]: ['a']

您实际需要做的是初始化四个不同的列表:

a = []
b = []
c = []
d = []
for lis in z:
  a.append(lis['loss'])
  b.append(lis['val_loss'])
  c.append(lis['accuracy'])
  d.append(lis['val_accuracy'])