在自定义后从2个列表创建新列表

2024-10-01 09:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个ordereddict列表,我通过一个函数从DB中获取,它们如下所示

第一个列表打印输出:

OrderedDict([('Items', '1'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 223.513353868968)])
OrderedDict([('Items', '2'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 243.513353868968)])
OrderedDict([('Items', '3'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 263.513353868968)])
OrderedDict([('Items', '4'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 323.513353868968)])
OrderedDict([('Items', '5'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 333.513353868968)])
OrderedDict([('Items', '6'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 343.513353868968)])
OrderedDict([('Items', '7'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 353.513353868968)])
OrderedDict([('Items', '8'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 13.513353868968)])
OrderedDict([('Items', '9'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 123.513353868968)])
OrderedDict([('Items', '10'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 162.513353868968)])
OrderedDict([('Items', '11'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 213.513353868968)])

第二个列表打印输出:

OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])
OrderedDict([('planneditems', '4'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 113.513353868968)])
OrderedDict([('planneditems', '5'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 133.513353868968)])
OrderedDict([('planneditems', '6'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 213.513353868968)])

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

步骤:

Take first flip value of second list : 23.513353868968
Subtract this with all the flip values of first list
23.513353868968 - 223.513353868968 = -200 (ignore the sign)
23.513353868968 - 243.513353868968 = 220
23.513353868968 - 263.513353868968 = 240 
23.513353868968 - 323.513353868968 = 300
23.513353868968 - 333.513353868968 = 313
23.513353868968 - 343.513353868968 = 320
23.513353868968 - 13.513353868968 = 10
23.513353868968 - 123.513353868968 = 100
23.513353868968 - 162.513353868968 = 139
23.513353868968 - 213.513353868968 = 190

在上面的结果中,第一个列表的翻转值13.513353868968的差异较小,因此我需要从第二个列表中选择翻转值23.513353868968的键值对,即

OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])

并将其放在第一个较小的差异和第二个较小的差异之间,即它必须放在第一个列表中第8行的旁边

像这样,我想从第二个列表中获取所有的值并重复同样的事情,在第二个列表的末尾,根据自定义排序插入第二个列表,它们也应该在自己内部进行排序

新列表预期打印输出:

    OrderedDict([('Items', '1'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 223.513353868968)])
    OrderedDict([('Items', '2'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 243.513353868968)])
    OrderedDict([('Items', '3'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 263.513353868968)])
    OrderedDict([('Items', '4'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 323.513353868968)])
    OrderedDict([('Items', '5'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 333.513353868968)])
    OrderedDict([('Items', '6'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 343.513353868968)])
    OrderedDict([('Items', '7'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 353.513353868968)])
    OrderedDict([('Items', '8'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 13.513353868968)])
    OrderedDict([('planneditems', '1'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 23.513353868968)])
    OrderedDict([('planneditems', '4'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 113.513353868968)])
    OrderedDict([('Items', '9'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 123.513353868968)])
    OrderedDict([('Items', '10'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 162.513353868968)])
    OrderedDict([('Items', '11'), ('Itemspaid', 'Rutr'), ('First', 'Het'), ('Second', 'Fru'), ('Third', 'yurn'), ('Flip', 213.513353868968)])
    OrderedDict([('planneditems', '6'), ('plannedItemspaid', 'pRutr'), ('PlannedFirst', 'pHet'), ('PlannedSecond', 'pFru'), ('PlannedThird', 'pyurn'), ('Flip', 213.513353868968)])

我尝试了下面的代码,我不能使这项工作如预期,它打印出最后一个条目,任何帮助将不胜感激。你知道吗

for G in List2:
    diffs = []
    indexvalue=List2.index(G)
    for i in range(1, len(List1)):
        d1 = (G['Flip'] - List1[i - 1]['Flip'])
        d2 = (G['Flip'] - List1[i]['Flip'])
        t = (d1 + d2, i)
        diffs.append(t)
        j = min(diffs)[1]
new_xs=List1[0:j] + [List2[indexvalue]]+ List1[j:]
print(new_xs)

Tags: 列表itemsfirstordereddictsecondthirdfliphet
1条回答
网友
1楼 · 发布于 2024-10-01 09:27:04
insertions = []
for G in List2:
    diffs = []
    indexvalue=List2.index(G)
    for i in range(1, len(List1)):
        d1 = abs(G['Flip'] - List1[i - 1]['Flip'])
        d2 = abs(G['Flip'] - List1[i]['Flip'])
        t = (d1 + d2, i)
        diffs.append(t)
    j = min(diffs)[1]
    insertions.append((j, indexvalue))
insertions.sort()
new_xs = []
last_j = 0
for j, indexvalue in insertions:
    new_xs += List1[last_j:j]
    new_xs.append(List2[indexvalue])
    last_j = j
new_xs += List1[last_j:]
print(new_xs)

Output与您的预期输出不匹配,但我确信您的预期装备无论如何都不正确(例如,缺少计划的第5项)。你知道吗

相关问题 更多 >