【问题标题】:How to extract and append the list(as dict values) from python dictionary to a list having an list of dictionary?如何从python字典中提取列表(作为dict值)并将其附加到具有字典列表的列表中?
【发布时间】:2020-12-12 10:56:57
【问题描述】:

这里的 z 是一个 dict() 的列表。

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

我想在一个单独的列表中附加所有字典值 'loss' 和类似的 'val_loss'、'accuracy'、'val_accuracy'。 为此,我尝试编写以下 python 代码:

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'])

但是当我尝试打印列表 print(len(a)) 的长度时,输出是 40 而不是 10?

我只想将所有'loss' 附加到a

【问题讨论】:

  • 您的问题是您将所有变量分配给同一个列表,因此附加到一个附加到所有变量。这在此处演示:` >>> a = b = [] >>> a.append(1) >>> print(b) >>> [1] ` 分别初始化它们。
  • 要补充@CoryNezin 所说的内容,您可以写a, b, c, d = [], [], [], [] 作为作业
  • @CoryNezin,thanx... 我是在一次初始化时犯了错误。这 >>> a = [] >>> b = [] >>> c = [] >>> d = [] 解决了这个问题。

标签: python list dictionary append iteration


【解决方案1】:

符号a = b = c = d = [] 将新列表分配给d,然后将其他3 个变量分配给d,因此您有4 个变量指向同一个列表,因此您将4*10 项放在同一个列表中.

做:

a, b, c, d = [], [], [], [] 

使用mapitemgetter 你可以做到

from operator import itemgetter
loss =         list(map(itemgetter("loss"), z))
val_loss =     list(map(itemgetter("val_loss"), z))
accuracy =     list(map(itemgetter("accuracy"), z))
val_accuracy = list(map(itemgetter("val_accuracy"), z))

【讨论】:

  • 请为 itemgetter 包括适当的导入
  • 需要包含这个from operator import itemgetter
【解决方案2】:

在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'])

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 2023-03-23
    • 2019-03-29
    • 2023-02-02
    • 2022-01-06
    • 2020-04-09
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多