自定义排序后,从2个orderedict列表创建新列表

我有两个有序字典列表,我通过一个函数从数据库中获取它们,它们如下所示

选择 | 换行 | 行号
  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)])
选择 | 换行 | 行号
  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)])

我想从第二个列表中提取每个翻转值,并将其与第一个列表的所有翻转值相减,然后将相应的键值对插入到第一个列表中,其中值之间的差异较小,如下所示,这是为了保持第一个列表值的顺序(因为它们已经排序)

选择 | 换行 | 行号
  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

在上面的结果中,第一个列表的翻转值13.513353868968的差异较小,所以我需要从第二个列表中挑选翻转值23.513353868968的键值对,该对是

选择 | 换行 | 行号
  1.     OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])

并将其放在第一个较小的差异和第二个较小的差异之间,即它必须位于第一列表中第8项的旁边
像这样,我想从第二个列表中获取所有值,并重复相同的事情

选择 | 换行 | 行号
  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)])

我尝试了下面的代码,我不能使这项工作如预期,它打印出多个列表,任何帮助将不胜感激。

选择 | 换行 | 行号
  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)
# 回答1


您有两个集合,Items和PlanndItems,您想要减去Items[i]。从PlanndItems[i]中翻转。是否翻转并将其插入到新的OrderedDict中?
# 回答2


我想从第二个列表中获取每个Flip值,并将其与第一个列表的所有Flip值相减,然后将相应的键值对插入到第一个列表中,其中值之间的差异较小。这是为了保持第一个列表值的顺序(因为它们已经排序)

标签: python

添加新评论