【问题标题】:Compare list items with a list of pairs, and output matching pairs将列表项与对列表进行比较,并输出匹配对
【发布时间】:2020-05-26 20:34:58
【问题描述】:

我的列表格式如下:

order_ids = ['Order ID', '026-2529662-9119536', '026-4092572-3574764', '026-4267878-0816332', '026-5334006-4073138', '026-5750353-4848328', '026-5945233-4883500', '026-5966822-8160331', '026-8799392-8255522', '202-5076008-9615516', '202-5211901-8584318', '202-5788153-3773918', '202-6208325-9677946', '203-1024454-3409960', '203-1064201-9833131', '203-4104559-7038752', '203-5013053-9959554', '203-5768187-0573905', '203-8639245-4145958', '203-9473169-4807564', '204-1577436-4733125', '204-7025768-1965915', '204-9196762-0226720', '205-6427246-2264368', '205-9028779-8764322', '206-0703454-9777135', '206-0954144-1685131', '206-3381432-7615531', '206-3822931-6939555', '206-4658913-5563533', '206-5213573-9997926', '206-5882801-0583557', '206-7158700-9326744', '206-7668862-3913143', '206-8019246-1474732', '206-8541775-0545153']


one = [['Order ID', 'Amount'], ['026-2529662-9119536', '10.42'], ['026-4092572-3574764', '10.42'], ['026-4267878-0816332', '1.75'], ['026-5334006-4073138', '17.990000000000002'], ['026-5750353-4848328', '16.25'], ['026-5945233-4883500', '1.83'], ['026-5966822-8160331', '11.92'], ['026-8799392-8255522', '8.5'], ['202-5076008-9615516', '1.83'], ['202-5211901-8584318', '1.83'], ['202-5788153-3773918', '8.08'], ['202-6208325-9677946', '11.33'], ['203-1024454-3409960', '8.08'], ['203-1064201-9833131', '1.5'], ['203-4104559-7038752', '8.5'], ['203-5013053-9959554', '9.67'], ['203-5113131-7525963', '-8.5'], ['203-5768187-0573905', '3.66'], ['203-8639245-4145958', '5.08'], ['203-9473169-4807564', '3.66'], ['204-1577436-4733125', '1.83'], ['204-7025768-1965915', '1.83'], ['204-9196762-0226720', '11.33'], ['205-8348990-1889964', '-11.33'], ['205-9028779-8764322', '6.91'], ['206-0703454-9777135', '23.84'], ['206-0954144-1685131', '22.66'], ['206-3381432-7615531', '8.08'], ['206-3822931-6939555', '11.92'], ['206-4658913-5563533', '9.67'], ['206-5213573-9997926', '3.66'], ['206-5882801-0583557', '13.92'], ['206-7158700-9326744', '27.5'], ['206-7668862-3913143', '6.58'], ['206-8541775-0545153', '1.83']]

我想要做的是循环遍历 order_ids 中的每个项目,如果 order_id 存在于一个中 - 获取“值”

到目前为止,我尝试过的是:

with open('test.csv', mode='w', newline='') as outfile:
    writer = csv.writer(outfile)
    i = 0
    while i < len(order_ids):
        for order in order_ids:
            try:
                if order == one[i][0]:
                    value_a = one[i][1]
                    print(order, value_a)
                    writer.writerow([order, value_a])
                    i += 1
                else:
                    i += 1
                    pass
            except IndexError:
                i += 1

这有点工作 - 但“order_ids”中有 36 个项目,“one”中有 36 个列表,但只有 18 行被写入我的输出文件。

一个未写入的 order_id 的示例是“206-7668862-3913143”,尽管它在“one”中的值显然是“6.58”

是什么阻止了我的其余行被写入?

【问题讨论】:

    标签: python python-3.x list csv nested-lists


    【解决方案1】:

    您只需使用字典即可​​完成此操作。 dict() 构造函数将接受嵌套的对列表并创建一个字典映射order_idamount。然后我们可以遍历order_ids 列表,并写出出现在test.csv 中的任何order_id

    代码:

    import csv
    
    d = dict(one)
    
    with open('test.csv', mode='w', newline='') as outfile:
        writer = csv.writer(outfile)
        for order_id in order_ids:
            if order_id in d:
                writer.writerow([order_id, d[order_id]])
    

    test.csv:

    Order ID,Amount
    026-2529662-9119536,10.42
    026-4092572-3574764,10.42
    026-4267878-0816332,1.75
    026-5334006-4073138,17.990000000000002
    026-5750353-4848328,16.25
    026-5945233-4883500,1.83
    026-5966822-8160331,11.92
    026-8799392-8255522,8.5
    202-5076008-9615516,1.83
    202-5211901-8584318,1.83
    202-5788153-3773918,8.08
    202-6208325-9677946,11.33
    203-1024454-3409960,8.08
    203-1064201-9833131,1.5
    203-4104559-7038752,8.5
    203-5013053-9959554,9.67
    203-5768187-0573905,3.66
    203-8639245-4145958,5.08
    203-9473169-4807564,3.66
    204-1577436-4733125,1.83
    204-7025768-1965915,1.83
    204-9196762-0226720,11.33
    205-9028779-8764322,6.91
    206-0703454-9777135,23.84
    206-0954144-1685131,22.66
    206-3381432-7615531,8.08
    206-3822931-6939555,11.92
    206-4658913-5563533,9.67
    206-5213573-9997926,3.66
    206-5882801-0583557,13.92
    206-7158700-9326744,27.5
    206-7668862-3913143,6.58
    206-8541775-0545153,1.83
    

    【讨论】:

    • 您可以使用d.get(order_id),而不是使用if order_id in d: 检查密钥,然后使用d[order_id] 获取值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多