簡體   English   中英

追加到字典中的列表

[英]Appending to List within a Dictionary

目標:將value['itemArray']項目追加到Products['Items'] -請參見函數fba_orders

問題:當前代碼僅將value['itemArray']的最后一項附加到Products['Items']

電流輸出:

{'Items': [{'SellerFulfillmentOrderItemId': 266804219, 'SellerSKU': 'IX-GZ31-31K6', 'Quantity': 1}, {'SellerFulfillmentOrderItemId': 266804219, 'SellerSKU': 'IX-GZ31-31K6', 'Quantity': 1}]}

正確的輸出將是:

{'Items': [{'SellerFulfillmentOrderItemId': 266804218, 'SellerSKU': 'KM-090914-840-BEARLAPTOP', 'Quantity': 1}, {'SellerFulfillmentOrderItemId': 266804219, 'SellerSKU': 'IX-GZ31-31K6', 'Quantity': 1}]}

碼:

import sys

VALUE = {'amountPaid': '43.38',
 'amountSaved': 0.0,
 'buyerCheckoutMessage': '',
 'buyerUserID': 13182254,
 'buyerUserName': 'W5Tiny',
 'checkoutStatus': {'status': 'Complete'},
 'createdTime': '2015-06-30T22:41:01Z',
 'creatingUserRole': 'Buyer',
 'itemArray': [{'item': {'itemID': 266804218,
    'price': '21.1',
    'quantity': 1,
    'sellerInventoryID': 'KM-090914-840-BEARLAPTOP',
    'sk': 'KM-090914-840-BEARLAPTOP',
    'title': u"VTech Bear's Baby Laptop, Blue [Toy]"}},
  {'item': {'itemID': 266804219,
    'price': '22.28',
    'quantity': 1,
    'sellerInventoryID': 'IX-GZ31-31K6',
    'sk': 'IX-GZ31-31K6',
     'title': 'Toy State Caterpillar Push Powered Rev It Up Dump Truck     [Toy]'}}],
 'orderID': 34013525,
 'orderStatus': 'Completed',
 'paidTime': '2015-06-30T22:50:38Z',
 'shippingAddress': {'addressID': 15798541,
  'cityName': 'Nashville',
  'country': 'US',
  'countryName': None,
  'name': 'UNKNOWN',
  'postalCode': '37221',
  'stateOrProvince': 'TN',
  'street1': '123 BOOGIE DRIVE',
  'street2': None},
 'shippingDetails': {'amount': '0.0',
  'insuranceFee': 0,
  'servicesArray': [],
  'shippingService': 'Standard shipping'},
 'subtotal': 43.38,
 'taxAmount': 0.0,
 'total': '43.38',
 'transactionArray': {'transaction': {'buyer': {'email':   'fakewilson259612@hotmail.com'},
   'finalValueFee': '0.0',
   'providerID': '11V84334FD304010L',
   'providerName': 'Paypal'}}}


def fba_order():
    address = {}
    products = {'Items': []}
    item = {}
    Items = []
    address['City'] = VALUE['shippingAddress']['cityName']
    address['CountryCode'] = VALUE['shippingAddress']['country']
    address['Line1'] = VALUE['shippingAddress']['street1']
    address['Line2'] = VALUE['shippingAddress']['street2']
    address['Name'] = VALUE['shippingAddress']['name']
    address['PostalCode'] = VALUE['shippingAddress']['postalCode']
    address['StateOrProvinceCode'] = VALUE['shippingAddress']['stateOrProvince']
    for items in VALUE['itemArray']:
        item['Quantity'] = items['item']['quantity']
        item['SellerFulfillmentOrderItemId'] = items['item']['itemID']
        item['SellerSKU'] = items['item']['sk']
        products['Items'].append(item)
        continue
    print address, '\n', products

if __name__ == '__main__':
    sys.exit(fba_order())

您將一遍又一遍地重復使用item引用的字典; 追加這本字典不會創建新副本。 而是要向該詞典添加多個引用。 當您繼續更改字典時,所有這些參考將顯示這些更改。

更好地為每個循環迭代生成一個全新的字典:

for items in VALUE['itemArray']:
    item = {
        'Quantity': items['item']['quantity'],
        'SellerFulfillmentOrderItemId': items['item']['itemID']
        'SellerSKU': items['item']['sk'],
    }
    products['Items'].append(item)

問題是您要在for循環外創建項目,然后僅更改for循環內的值並將其附加到列表中。

字典是參考,因此即使在追加到products['Items']列表之后,如果您更改了item字典,它也會對追加到列表中的item進行更改。

您想將item初始化for循環內的新字典。

范例-

def fba_order():
    address = {}
    products = {'Items': []}
    Items = []
    address['City'] = VALUE['shippingAddress']['cityName']
    address['CountryCode'] = VALUE['shippingAddress']['country']
    address['Line1'] = VALUE['shippingAddress']['street1']
    address['Line2'] = VALUE['shippingAddress']['street2']
    address['Name'] = VALUE['shippingAddress']['name']
    address['PostalCode'] = VALUE['shippingAddress']['postalCode']
    address['StateOrProvinceCode'] = VALUE['shippingAddress']['stateOrProvince']
    for items in VALUE['itemArray']:
        item = {}
        item['Quantity'] = items['item']['quantity']
        item['SellerFulfillmentOrderItemId'] = items['item']['itemID']
        item['SellerSKU'] = items['item']['sk']
        products['Items'].append(item)
        continue
    print address, '\n', products

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM