【问题标题】:Python Key Error can't parse fieldsPython Key Error 无法解析字段
【发布时间】:2018-11-01 12:28:05
【问题描述】:

我正在编写一个脚本并遍历一个列表以将其转换为 JSON。我的代码:

Mbody 是我从中提取信息的列表的名称。

index = 38
payload = {}

i = 0
while i < Number_SKUs: 
    SKU_size = 2
    size_index = 4
    value_index = 1
    time_index = 4
    ms_index = 2

    payload[i].sku = Mbody[index:(index + SKU_size*2)]
    index = index + SKU_size*2
    print(payload[i].sku)
    i+=1

由于某种原因,这导致了

Traceback (most recent call last):

File "parser.py", line 101, in <module> payload[i].sku = Mbody[index:(index + SKU_size*2)]
KeyError: 0

我在堆栈交换上进行了搜索,发现了几个类似的问题,但没有一个能回答我的问题。遍历列表并解析 sku 的最佳方法是什么?这最终会变成 JSON,但我可以暂时将它放在一个数组中,然后使用 dict 将其放入 JSON。

【问题讨论】:

  • payload 是空的,那么payload[i] 应该是什么?
  • 可能类似于payload[i] = {sku: Mbody[index:(index + SKU_size*2)]}。但是,payload[i].tag 应该来自哪里?
  • payload[i] 会变成类似 payload1.sku = [1011a]。 Payload1 应该成为 Mbody[index:(index + sku_size*2)] 中保存的任何值。 mbody 是一个日志字符串。所以这最终会读到类似 (payloadd1.sku = [38:(38+4)])
  • .tag 呢,这是从哪里来的?
  • 已编辑 - 应该说点别的。

标签: python


【解决方案1】:

在 python 中,您必须命名字典的键才能与它们交互。

p['a']['b']
# This is element b of p['a']

p['a'].b
# This is function b in object p['a']

默认情况下点符号不可用,尽管有些人有solutionsadd that

忽略这些,我们可以对您的代码进行一些更改以开始使用通常的符号。

index = 38
# This can just be a list, because i is continuous between 0 and Number_SKUs
payload = []

i = 0
while i < Number_SKUs:
    SKU_size = 2
    size_index = 4
    value_index = 1
    time_index = 4
    ms_index = 2

    # Each item is going to be a new dictionary, which we will
    # eventually add the the list of payloads
    new_payload = {}

    # Now we can create a dict entry for key 'sku' in new_payload
    new_payload['sku'] = Mbody[index:(index + SKU_size * 2)]

    # We can't do this, because tag_size is undefined
    #
    # index = index + tag_size * 2

    # We can't do this, because we have not yet added a 'tag' key 
    # to payload.
    #
    # print(payload[i]['tag'])

    # Now append new_payload to payload
    payload.append(new_payload)
    i += 1

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多