By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
431,982 Members | 1,738 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 431,982 IT Pros & Developers. It's quick & easy.

Create a new list from 2 lists of ordereddict after custom sort

P: 2
I have 2 lists of ordereddict which i fetch from DB through a function and they look like below

Expand|Select|Wrap|Line Numbers
  1. **First list printed output:**
  2.  
  3.     OrderedDict([('Items', '1'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 223.513353868968)])
  4.     OrderedDict([('Items', '2'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 243.513353868968)])
  5.     OrderedDict([('Items', '3'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 263.513353868968)])
  6.     OrderedDict([('Items', '4'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 323.513353868968)])
  7.     OrderedDict([('Items', '5'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 333.513353868968)])
  8.     OrderedDict([('Items', '6'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 343.513353868968)])
  9.     OrderedDict([('Items', '7'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 353.513353868968)])
  10.     OrderedDict([('Items', '8'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 13.513353868968)])
  11.     OrderedDict([('Items', '9'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 123.513353868968)])
  12.     OrderedDict([('Items', '10'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 162.513353868968)])
  13.     OrderedDict([('Items', '11'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 213.513353868968)])
Expand|Select|Wrap|Line Numbers
  1. **Second list printed output:**
  2.  
  3.     OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])
  4.     OrderedDict([('planneditems', '4'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 113.513353868968)])
  5.     OrderedDict([('planneditems', '5'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 133.513353868968)])
  6.     OrderedDict([('planneditems', '6'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 213.513353868968)])
I want to take every Flip value from second list and subtract that with all the Flip values of first list and insert the corresponding key value pair into first list where the difference between the values is lesser like below, this is to maintain the order of first list values(as they are already sorted)

Expand|Select|Wrap|Line Numbers
  1. **Steps:**
  2.  
  3.     Take first flip value of second list : 23.513353868968
  4.     Subtract this with all the flip values of first list
  5.     23.513353868968 - 223.513353868968 = -200 (ignore the sign)
  6.     23.513353868968 - 243.513353868968 = 220
  7.     23.513353868968 - 263.513353868968 = 240 
  8.     23.513353868968 - 323.513353868968 = 300
  9.     23.513353868968 - 333.513353868968 = 313
  10.     23.513353868968 - 343.513353868968 = 320
  11.     23.513353868968 - 13.513353868968 = 10
  12.     23.513353868968 - 123.513353868968 = 100
  13.     23.513353868968 - 162.513353868968 = 139
  14.     23.513353868968 - 213.513353868968 = 190
In the above result, the difference is lesser for the flip value 13.513353868968 of first list , so i need to pick the key value pair of the flip value 23.513353868968 from second list which is

Expand|Select|Wrap|Line Numbers
  1.     OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])
and place that between the first lesser difference and second lesser difference i.e it has to go next to items 8 in first list

Like this i want to fetch all the values from second list and repeat the same thing


Expand|Select|Wrap|Line Numbers
  1. **New List expected printed output:**
  2.  
  3.  
  4.         OrderedDict([('Items', '1'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 223.513353868968)])
  5.         OrderedDict([('Items', '2'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 243.513353868968)])
  6.         OrderedDict([('Items', '3'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 263.513353868968)])
  7.         OrderedDict([('Items', '4'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 323.513353868968)])
  8.         OrderedDict([('Items', '5'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 333.513353868968)])
  9.         OrderedDict([('Items', '6'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 343.513353868968)])
  10.         OrderedDict([('Items', '7'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 353.513353868968)])
  11.         OrderedDict([('Items', '8'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 13.513353868968)])
  12.         OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])
  13.         OrderedDict([('planneditems', '4'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 113.513353868968)])
  14.         OrderedDict([('Items', '9'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 123.513353868968)])
  15.         OrderedDict([('Items', '10'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 162.513353868968)])
  16.         OrderedDict([('Items', '11'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 213.513353868968)])
  17.         OrderedDict([('planneditems', '6'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 213.513353868968)])

i tried the below code , i am not able to make this work as expected, it prints out multiple lists, any help would be appreciated.

Expand|Select|Wrap|Line Numbers
  1.   for G in List2:
  2.         diffs = []
  3.         indexvalue=List2.index(G)
  4.         for i in range(1, len(List1)):
  5.             d1 = (G['Flip'] - List1[i - 1]['Flip'])
  6.             d2 = (G['Flip'] - List1[i]['Flip'])
  7.             t = (d1 + d2, i)
  8.             diffs.append(t)
  9.             j = min(diffs)[1]
  10.     new_xs=List1[0:j] +[List2[indexvalue]]+ List1[j:]
  11.     print(new_xs)
May 30 '18 #1
Share this Question
Share on Google+
2 Replies


RedSon
Expert 5K+
P: 5,000
You have two collections, Items and PlannedItems and you want to subtract Items[i].Flip from PlannedItems[i].Flip and then insert that into a new OrderedDict?
May 30 '18 #2

P: 2
I want to take every Flip value from second list and subtract that with all the Flip values of first list and insert the corresponding key value pair into first list where the difference between the values is lesser this is to maintain the order of first list values(as they are already sorted)
May 31 '18 #3

Post your reply

Sign in to post your reply or Sign up for a free account.