【问题标题】:Manipulating a list of dictionaries操作字典列表
【发布时间】:2019-01-29 17:37:05
【问题描述】:

我成功地从网上导入了这个json 文件,它看起来像:

[{"h_mag":"19.7","i_deg":"9.65","moid_au":"0.035"},{"h_mag":"20.5","i_deg":"14.52","moid_au":"0.028"},
等等……

我想提取键moid_au的值,稍后将moid_auh_mag的键值进行比较。

这有效:print(data[1]['moid_au']),但如果我尝试询问列表中的所有元素,它不会,我尝试:print(data[:]['moid_au'])

我尝试了迭代器和lambda 函数,但仍然没有工作,主要是因为我是数据操作的新手。当我有一本字典而不是字典列表时,它就可以工作。

提前感谢其他提示。一些链接令人困惑。

【问题讨论】:

  • 您需要一个简单的for loop。看看dictionarieslooping techniques上也有一节
  • 嗨 Giacomo,我在网上看到的简单的“for”循环是针对一本字典的,而不是针对字典“列表”的,我无法访问它们。
  • 您需要显示您尝试过的代码。
  • 我提供的链接也解释了循环列表。我个人建议你找到一个好的教程并坚持下去,而不是现在在这里提问。与阅读教程和练习练习相比,在不懂语言的情况下提问会浪费更多的时间,而且你会因为在提问之前没有进行适当的研究而被否决。如果您对教程的某些方面有疑问,您可以尝试搜索答案,并最终提出具体问题链接到教程,以便人们可以正确解释。
  • 嘿! data.keys(): print(data[k]) 中的 k 是这样的,但下面有人回答了一些简单的问题。我知道这是一个初学者的问题。

标签: python json list dictionary data-manipulation


【解决方案1】:

听起来您使用 lambda 是错误的,因为您还需要 map

c = [{"h_mag":"19.7","i_deg":"9.65","moid_au":"0.035"},{"h_mag":"20.5","i_deg":"14.52","moid_au":"0.028"}]

list(map(lambda rec: rec.get('moid_au'), c))
['0.035', '0.028']

每个lambda 从您的列表中获取一条记录,然后将您的函数映射到该记录。

【讨论】:

  • 为什么使用 get 而不是常规索引 (list(map(lambda rec: rec['moid_au'], c)))?
  • 一个优点是如果它们的键不存在不会抛出错误
  • 这是我所知道的唯一区别,从我的角度来看,它不一定是优势
  • 好的,这取决于它可能出现的问题,特别是如果你给它一个默认值,比如0,如果你打算按照 OP 指定的方式绘制数据。
【解决方案2】:

使用print(data[:]['moid_au'])等于print(data['moid_au']),你可以看到它不起作用,因为data没有名为'moid_au'的键。

尝试使用循环:

for item in data:
    print(item['moid_au'])

【讨论】:

  • 感谢 ClsForCookies,这行得通。然而事情不仅仅是打印它,而是操纵它,所以我会尝试看看如何让它成为我可以玩的变量。
【解决方案3】:

您想以哪种方式比较它们?

以这样的方式获取值会有用吗?

list_of_dicts = [{"h_mag":"19.7","i_deg":"9.65","moid_au":"0.035"}, {"h_mag":"20.5","i_deg":"14.52","moid_au":"0.028"}]
mod_au_values = [d["moid_au"] for d in list_of_dicts]
h_mag_values = [d["h_mag"] for d in list_of_dicts]

【讨论】:

  • 正是这样!后来我可以用这两个变量做任何我想做的事情(例如情节)
  • @IreneDelCarmenPérez-Merbis 我很高兴能帮上忙!如果这完全回答了您的问题,我建议您将其标记为已接受,以便其他人更容易看到它。
【解决方案4】:

使用您的方法遍历整个数组以获取键的所有实例,此方法可能对您有用

a = [data[i]['moid_au']for i in range(len(data))]
print(a)

【讨论】:

    【解决方案5】:
    for key,  value in my_list.items (): 
           print key
           print value
    
    for value in my_list.values (): 
           print value
    
    for key in my_list.keys():
           print key
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 2018-06-30
      相关资源
      最近更新 更多