簡體   English   中英

使用新鍵將字典的值映射到新字典

[英]Mapping values of a dictionary to new dictionary with new keys

我正在從 pdf 文件中讀取表數據,然后將該表數據轉換為 dataframe,然后轉換為字典。 我的問題是每次讀取字典的表數據鍵都不是固定的,就像它有時有 {'Sno':1,'ItemDescription':'ABC'} 之類的鍵,有時它有 {'Sl No':1, '描述':'XYZ'}。 我想創建一個具有固定鍵的新字典,如下所示,其中鍵是左側部分,右側部分是從 dataframe 中提取的鍵,因此如果它與列表中的匹配,則值應為 map 到新鍵。

Srno = ["Sno", "Sl No.", "Order No.", "PO No."]
Productdescription = ["Item Code / Product Description", "Description", "Description of Goods", "Particulars"]
HSNCode = ["HSN / SAC\nCode", "HSN Code", "HSN", "HSN/SAC"]
Quantity = ["Quantity"]
ASIN = ["ASIN"]
ISBN = ["ISBN/EAN/UPC"]
Rate = ["Unit Price\n[INR]", "Rate", "Unit cost", "List price"]
Tax = ["IGST[INR]\nAmount", "Tax rate", "Tax type", "Tax amount"]
Discount = ["Discount", "Disc. %"]
Total = ["Total amount", "Amount", "Total", "Total\n[INR]", "Line Total\n[INR]"]
Model = ["Model #"]

這是從 dataframe 創建的字典樣本。

{'item': [{'Sno': 1,
   'ItemCodeProductDescription': 'TGMOCL0015CORSAIRMOUSE,M55RGBPRO,PART#CH-9308011-AP',
   'HSNSACCode': '8471.60.60',
   'Quantity': 7,
   'UnitPrice': 1741,
   'Total': 12187,
   'Rate': 18,
   'LineTotal': 14380.66},
  {'Sno': 2,
   'ItemCodeProductDescription': 'TGMOCL0013CORSAIRMOUSE,HARPOONPRO-BLK-RGB,PART#CH-9301111-AP',
   'HSNSACCode': '8471.60.60',
   'Quantity': 8,
   'UnitPrice': 1200,
   'Total': 9600,
   'Rate': 18,
   'LineTotal': 11328.0},
  {'Sno': 3,
   'ItemCodeProductDescription': 'TGCBCL0029CORSAIRCABINETSPEC-05,BLK-PART#CC-9011138-WW',
   'HSNSACCode': '8473.30.99',
   'Quantity': 37,
   'UnitPrice': 2225,
   'Total': 82325,
   'Rate': 18,
   'LineTotal': 97143.5},
  {'Sno': 4,
   'ItemCodeProductDescription': 'TGHSCL0003CORSAIRGAMINGHEADSETHS50StereoCarbonPART#CA-9011170-AP',
   'HSNSACCode': '8518.30.00',
   'Quantity': 92,
   'UnitPrice': 3000,
   'Total': 276000,
   'Rate': 18,
   'LineTotal': 325680.0},
  {'Sno': 5,
   'ItemCodeProductDescription': 'TGMOCL0001CORSAIRMOUSE,HARPOON-BLK-RGB,PART#CH-9301011-AP',
   'HSNSACCode': '8471.60.60',
   'Quantity': 43,
   'UnitPrice': 1018,
   'Total': 43774,
   'Rate': 18,
   'LineTotal': 51653.32},
  {'Sno': 6,
   'ItemCodeProductDescription': 'TGKBCL0001CORSAIRKEYBOARDK95PLTN-BLK-MXSpeed-RGBPART#CH-9127014-NA',
   'HSNSACCode': '8471.60.40',
   'Quantity': 8,
   'UnitPrice': 10750,
   'Total': 86000,
   'Rate': 18,
   'LineTotal': 101480.0},
  {'Sno': 7,
   'ItemCodeProductDescription': 'TGKBCL0007CORSAIRKEYBOARDK55-BLK-RBRDME-RGBPART#CH-9206015-NA',
   'HSNSACCode': '8471.60.40',
   'Quantity': 14,
   'UnitPrice': 2400,
   'Total': 33600,
   'Rate': 18,
   'LineTotal': 39648.0}]}

最終的字典應該是這樣的

{'item': [{'Srno': 1,
       'ProductDescription': 'TGMOCL0015CORSAIRMOUSE,M55RGBPRO,PART#CH-9308011-AP',
       'HSNCode': '8471.60.60',
       'Quantity': 7,
       'ASIN':Null 
       'ISBN':Null
       'Rate': 1741,
       'Discount':Null,
       'Model':Null,
       'Tax': 18,
       'Total': 14380.66}

請建議從舊字典創建新字典的有效方法。

由於原字典中禁止在迭代過程中更改鍵,所以這里只能通過新字典。 並且可以通過檢查可能選項列表中的條目來確定正確的密鑰。

result_list = []

for i in items['item']:
    result = {}

    for key, value in i.items():
        if key in Srno:
            result['Srno'] = value
        elif key in Productdescription:
            result['ProductDescription'] = value
        elif key in HSNCode:
            result['HSNCode'] = value
        elif key in Quantity:
            result['Quantity'] = value
        elif key in ASIN:
            result['ASIN'] = value
        elif key in ISBN:
            result['ISBN'] = value
        elif key in Rate:
            result['Rate'] = value
        elif key in Tax:
            result['Tax'] = value
        elif key in Discount:
            result['Discount'] = value
        elif key in Total:
            result['Total'] = value
        elif key in Model:
            result['Model'] = value

    if result:
        result_list.append(result.copy())

暫無
暫無

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

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