【问题标题】:Python parsing Nested OrdereddictPython解析嵌套的Ordereddict
【发布时间】:2014-04-26 08:44:24
【问题描述】:

我有一个具有以下值的嵌套有序字典字段:

OrderedDict
([
 ('activateable', False),
 ('fields', 
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_1’),  (‘amount’, ‘10’)]),
    [OrderedDict ([ ('autoNumber', False),  ('name', ‘col_2’),  (‘amount’, ‘10’)])
 )
 ('pin', False)
])

我想传递值col_1,col_2,得到对应的金额值。 我尝试过通过常规 for 循环和其他迭代进行解析,但无法达到第二级。 您能否提出一种方法来实现这一目标?

【问题讨论】:

  • “解析OrderedDict”是什么意思?您是否将该结构转换为字符串并尝试将其转换回来?或者您想简单地访问字段col_1 等?在第二种情况下,只需使用:d['fields'][i]['name'] 作为第一个字典中的 col_1 值等。
  • 有什么例子可以确保我们理解您的问题吗?
  • 您能否检查发布的代码,因为括号不匹配。
  • 本例中是否需要 OrderedDict 中的“Ordered”部分?
  • 我认为 Mahesh 想要的只是 SELECT amount FROM fields WHERE name = ?

标签: python parsing ordereddictionary


【解决方案1】:

如果我正确理解您的问题,您正在尝试访问子词典的 amount 值,其中 name 等于某个指定值(例如 "col_1")。没有循环就没有直接的方法可以找到它,因为您正在搜索一个值,而不是一个键,但是所需的代码不需要非常复杂:

for field in top_level_dict["fields"]:
    if field["name"] = "col_1":
        print(field["amount"])
        break

这会打印它找到的第一个匹配项(您可以做任何您想做的事情,而不是打印,这对于示例代码来说似乎最简单)。如果有多个 sub-dict 可以匹配,并且您想从所有这些中打印 "amount" 值,则可以取出 break 语句。

如果要搜索多个值,您可能希望将数据结构转换为可以进行更高效查找的结构。例如,这里有一些基本代码可以创建一个新字典,将您的 name 值映射到 amount 值(我假设所有名称都是唯一的):

# set up a better mapping
name_amount_dict = {field["name"]: field["amount"] for field in top_level_dict["fields"]}

# use it to look up a value we want
print(name_amount_dict["col_1"])

【讨论】:

  • 您应该接受这个答案,以感谢 Blckknght 为您提供的帮助。
猜你喜欢
  • 2016-04-20
  • 2021-07-31
  • 1970-01-01
  • 2019-01-16
  • 2013-09-19
  • 2021-12-01
  • 1970-01-01
  • 2018-09-05
  • 2018-09-12
相关资源
最近更新 更多