我无法在列表中填充字典

时间:2019-11-06 14:20:58

标签: python json

我正在尝试在列表中的字典中填充键值对。我要填充的列表如下:

item_table = [
    for i in range(jsonData.length) :
        {
        'item_no' : str(item_no[i]),
        'part_no' : str(part_no[i]),
        'description' : str(description[i]),
        'quantity' : str(quantity[i]),
        'unit_price' : str(unit_price[i]),
        'total_price' : str(total_price[i])
    },
]

正如您在此处看到的,我正在尝试在列表内使用for循环,但这给了我一个错误。 我从以下位置获取要插入的值:

 for i in range(jsonData.length) :
    unit_market_price[i] = jsonData[i]['unit_market_price']
    unit_market_price[i] = float(unit_market_price)
    markup_percentage[i] = jsonData[i]['markup_percentage']
    markup_percentage[i] = float(markup_percentage)
    unit_price[i] = calculateUitPrice(unit_market_price[i], markup_percentage[i])
    item_no[i] = jsonData[i]['item_no']
    part_no[i] = jsonData[i]['part_no']
    description[i] = jsonData[i]['description']
    quantity[i] = jsonData[i]['quantity']

顾名思义,jsonData是一个JSON对象。 先感谢您。

2 个答案:

答案 0 :(得分:2)

你很近。只需使用list comprehension并每次使用循环创建字典

item_table = [
    {
        'item_no' : data['item_no'],
        'part_no' : data['part_no'],
        'description' : data['description'],
        'quantity' : data['quantity'],
        'unit_price' : calculateUitPrice(
            float(data['unit_market_price']),
            float(data['markup_percentage'])
        ),
        'total_price' : str(total_price[i])  # <-- !! remember to change this part as your code doesn't currently have a definition on total_price
    } 
    for data in jsonData
]

答案 1 :(得分:1)

您尝试的是无效的语法。如果您需要使用列表推导功能,我将在下面提供一个代码段。

但是,出于可读性考虑,您应该考虑简单地实例化一个空列表,然后在循环中向其添加新元素:

item_table = []
for i in range(jsonData.length):
    item = {
        'item_no': str(item_no[i]),
        'part_no' : str(part_no[i]),
        'description' : str(description[i]),
        'quantity' : str(quantity[i]),
        'unit_price' : str(unit_price[i]),
        'total_price' : str(total_price[i])
    }
    item_table.append(item)

我还将提到在Python中使用len()函数来获取列表的长度。

如第一段所述,这是上面代码的列表理解版本:

item_table = [
    {
        'item_no': str(item_no[i]),
        'part_no' : str(part_no[i]),
        'description' : str(description[i]),
        'quantity' : str(quantity[i]),
        'unit_price' : str(unit_price[i]),
        'total_price' : str(total_price[i])
    }
    for i in range(jsonData.length)
]