【问题标题】:Nornalize nested dict to a single dict将嵌套字典规范化为单个字典
【发布时间】:2018-11-14 13:05:21
【问题描述】:

我有一个从文件中读取的实际结构:

{
  "id": 1,
  "name": "Explosives",
  "category_id": 1,
  "average_price": 294,
  "is_rare": 0,
  "max_buy_price": 755,
  "max_sell_price": 1774,
  "min_buy_price": 99,
  "min_sell_price": 18,
  "buy_price_lower_average": 176,
  "sell_price_upper_average": 924,
  "is_non_marketable": 0,
  "ed_id": 128049204,
  ** "category": {
    "id": 1,
    "name": "Chemicals"
  } **
}

我正在尝试创建一个列表以在之后插入数据库。最后字典中的数据也应该在我列表的末尾。

正如你在下面看到的,我的字典里最后有字典。我的实际代码 - 正在运行 - 是:

 for v in d:
        commodities_reference = []
        for k, g in v.items():
            if isinstance(g, dict):
                dict1 = g
                my_value1 = dict1.get("id")
                my_value2 = dict1.get("name")

        for s, i in v.items():
            if not isinstance(i, dict):
                commodities_reference.append(i)
        commodities_reference.append(my_value1)
        commodities_reference.append(my_value2)  

尽管如此,我想知道是否有更“pythonic”的方式来做到这一点,因为它对我来说看起来有点难看。

提前谢谢你。

【问题讨论】:

  • 这个问题可能更适合codereview.stackexchange.com,因为您的代码可以工作,但您只需要建议使其变得更好。
  • 也许您可以添加备注说明您要使用此代码实现的目标?
  • 您可以添加 elif: 块,而不是迭代 v.items() 两次
  • 我正在尝试创建一个列表以在之后插入数据库。最后字典中的数据也应该在我列表的末尾。抱歉不清楚。
  • 我会听从你的建议@Jean-FrançoisCorbett 并在那里发帖。

标签: python python-3.x


【解决方案1】:
v = {
    "id": 1,
    "name": "Explosives",
    "category_id": 1,
    "average_price": 294,
    "is_rare": 0,
    "max_buy_price": 755,
    "max_sell_price": 1774,
    "min_buy_price": 99,
    "min_sell_price": 18,
    "buy_price_lower_average": 176,
    "sell_price_upper_average": 924,
    "is_non_marketable": 0,
    "ed_id": 128049204,
    "category": {
        "id": 1,
        "name": "Chemicals"
    }
}

commodities_reference = []

for val in v.values():
    if isinstance(val, dict):
        commodities_reference.extend(val.values())
    else:
        commodities_reference.append(val)

print(commodities_reference)

或者,如果您想真正简洁但可读性较差:

for val in v.values():
    commodities_reference += val.values() if isinstance(val, dict) else [val]

【讨论】:

  • 它不符合我的要求。输出是来自不同 dics 的所有值的列表,其中包含来自列表末尾的嵌套 dict 的实际数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 2016-06-09
  • 2020-12-31
相关资源
最近更新 更多