Home > front end >  How to map and update python dictionary with different key value pair?
How to map and update python dictionary with different key value pair?

Time:05-22

I want to transform a Dictionary in Python, from Dictionary 1 Into Dictionary 2 as follows.

Dictionary 1. A bank transaction which has not been ‘processed’

transaction = {
"trans_time": "14/07/2015 10:03:20",
"trans_type": "DEBIT",
"description": "239.95 USD DHL.COM TEXAS USA",
}

I want to transform the above dictionary to the following

Dictionary 2. A transaction which has been cleaned and classified

transaction =  {
    "trans_time": "14/07/2015 10:03:20",
    "trans_type": "DEBIT",
    "description": "DHL.COM TEXAS USA",
    "amount": 239.95,
    "currency": "USD",
    "location": "TEXAS USA",
    "merchant_name": "DHL"
    
    }

I tried the following but it did not work

dic1 = {
"trans_time": "14/07/2015 10:03:20",
"trans_type": "DEBIT",
"description": "239.95 USD DHL.COM TEXAS USA"
}
print(type(dic1))
copiedDic = dic1.copy()
print("copiedDic = ",copiedDic)


updatekeys = ['amount', 'currency', 'merchant_name', 'location', 'trans_category']


for key in dic1:
    if key == 'description':
        list_words = dic1[key].split(" ")
newdict =  {updatekeys[i]: x for i, x in enumerate(list_words)}

copiedDic.update(newdict)

print(copiedDic)

I got The following result

{
'trans_time': '14/07/2015 10:03:20',
 'trans_type': 'DEBIT', 
'description': '239.95 USD DHL.COM TEXAS USA',
 'amount': '239.95',
 'currency': 'USD',
 'merchant_name': 'DHL.COM',
 'location': 'TEXAS',
 'trans_category': 'USA'
}

My Intended output should look like this:

transaction =  {
    "trans_time": "14/07/2015 10:03:20",
    "trans_type": "DEBIT",
    "description": "DHL.COM TEXAS USA",
    "amount": 239.95,
    "currency": "USD",
    "location": "TEXAS USA",
    "merchant_name": "DHL"

    }

CodePudding user response:

If you want to transform, you do not need the copy to the original dictionary.

Just do something like this:

new_keys = ['amount', 'currency', 'merchant_name', 'location', 'trans_category']
values = transaction["description"].split(' ')
for idx, key in enumerate(new_keys):
    if key == "amount":
        transaction[key] = float(values[idx])
    else:
       transaction[key] = values[idx]

CodePudding user response:

I think it would be easier to turn the value into an array of words and parse it. Here, an array of words 'aaa ' is created from the dictionary string 'transaction['description']'. Where there are more than one word(array element) 'join' is used to turn the array back into a string. The currency value itself is converted to fractional format from the string. In 'merchant_name', the segment up to the point is taken.

transaction = {
"trans_time": "14/07/2015 10:03:20",
"trans_type": "DEBIT",
"description": "239.95 USD DHL.COM TEXAS USA",
}
aaa = transaction['description'].split()
transaction['description'] = ' '.join(aaa[2:])
transaction['amount'] = float(aaa[0])
transaction['currency'] = aaa[1]
transaction['location'] = ' '.join(aaa[3:])
transaction['merchant_name'] = aaa[2].partition('.')[0]

print(transaction)

Output

{
 'trans_time': '14/07/2015 10:03:20',
 'trans_type': 'DEBIT',
 'description': 'DHL.COM TEXAS USA',
 'amount': 239.95,
 'currency': 'USD',
 'location': 'TEXAS USA',
 'merchant_name': 'DHL'}
  • Related