【问题标题】:Compare nested list and group lists having similar nth element比较具有相似第 n 个元素的嵌套列表和组列表
【发布时间】:2020-08-13 13:41:08
【问题描述】:

我有一个包含多个嵌套列表的列表。我想遍历这些嵌套列表,如果嵌套列表中的第三个元素相同,那么我想将这些嵌套列表分组到一个单独的列表中。

输入:

[['10', '1', 'SELL', 'toaster_1', '10.00', '20'], ['12', '8', 'BID', 'toaster_1', '7.50'], ['13', '5', 'BID', 'toaster_1', '12.50'], ['15', '8', 'SELL', 'tv_1', '250.00', '20'], ['16'], ['17', '8', 'BID', 'toaster_1', '20.00'], ['18', '1', 'BID', 'tv_1', '150.00'], ['19', '3', 'BID', 'tv_1', '200.00'], ['20'], ['21', '3', 'BID', 'tv_1', '300.00']]

期望的输出:

Toaster List = [['10', '1', 'SELL', 'toaster_1', '10.00', '20'], ['12', '8', 'BID', 'toaster_1', '7.50'], ['13', '5', 'BID', 'toaster_1', '12.50'], ['17', '8', 'BID', 'toaster_1', '20.00']]

TV List = [['15', '8', 'SELL', 'tv_1', '250.00', '20'], ['18', '1', 'BID', 'tv_1', '150.00'], ['19', '3', 'BID', 'tv_1', '200.00'], ['21', '3', 'BID', 'tv_1', '300.00']]

然后我可以对这些列表进行拍卖处理。

我无法根据拍卖品名称将它们分开。我浏览了多个网站,但找不到任何答案,有人可以指导我吗?

【问题讨论】:

    标签: python-3.x list


    【解决方案1】:

    一个想法是有一个dict 作为结果

    例如:

    data = [['10', '1', 'SELL', 'toaster_1', '10.00', '20'], ['12', '8', 'BID', 'toaster_1', '7.50'], ['13', '5', 'BID', 'toaster_1', '12.50'], ['15', '8', 'SELL', 'tv_1', '250.00', '20'], ['16'], ['17', '8', 'BID', 'toaster_1', '20.00'], ['18', '1', 'BID', 'tv_1', '150.00'], ['19', '3', 'BID', 'tv_1', '200.00'], ['20'], ['21', '3', 'BID', 'tv_1', '300.00']]
    result = {}
    for i in data:
        if len(i) > 3:
            result.setdefault(i[3], []).append(i)
        
    print(result)
    

    输出:

    {'toaster_1': [['10', '1', 'SELL', 'toaster_1', '10.00', '20'],
                   ['12', '8', 'BID', 'toaster_1', '7.50'],
                   ['13', '5', 'BID', 'toaster_1', '12.50'],
                   ['17', '8', 'BID', 'toaster_1', '20.00']],
     'tv_1': [['15', '8', 'SELL', 'tv_1', '250.00', '20'],
              ['18', '1', 'BID', 'tv_1', '150.00'],
              ['19', '3', 'BID', 'tv_1', '200.00'],
              ['21', '3', 'BID', 'tv_1', '300.00']]}
    

    【讨论】:

      【解决方案2】:

      我希望我理解你的问题,但你可以使用简单的过滤列表理解:

      lst = [['10', '1', 'SELL', 'toaster_1', '10.00', '20'], ['12', '8', 'BID', 'toaster_1', '7.50'], ['13', '5', 'BID', 'toaster_1', '12.50'], ['15', '8', 'SELL', 'tv_1', '250.00', '20'], ['16'], ['17', '8', 'BID', 'toaster_1', '20.00'], ['18', '1', 'BID', 'tv_1', '150.00'], ['19', '3', 'BID', 'tv_1', '200.00'], ['20'], ['21', '3', 'BID', 'tv_1', '300.00']]
      
      
      toaster_list = [l for l in lst if len(l) > 3 and l[3] == 'toaster_1']
      tv_list = [l for l in lst if len(l) > 3 and l[3] == 'tv_1']
      
      print(toaster_list)
      print(tv_list)
      

      打印:

      [['10', '1', 'SELL', 'toaster_1', '10.00', '20'], ['12', '8', 'BID', 'toaster_1', '7.50'], ['13', '5', 'BID', 'toaster_1', '12.50'], ['17', '8', 'BID', 'toaster_1', '20.00']]
      [['15', '8', 'SELL', 'tv_1', '250.00', '20'], ['18', '1', 'BID', 'tv_1', '150.00'], ['19', '3', 'BID', 'tv_1', '200.00'], ['21', '3', 'BID', 'tv_1', '300.00']]
      

      【讨论】:

      • 谢谢 Andrej,代码运行良好。但我手头没有拍卖物品的名称(烤面包机和电视)。它将在运行时传递。对不起,我是 python 新手。我创建了另一个列表来命名所有拍卖品。无论如何我可以使用该列表来执行上述操作吗?
      • @user6662097 我现在在移动设备上,但 Rakesh 的回答很好 - 创建一个字典,其中键是您的姓名,值是项目列表。
      • 谢谢安德烈!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多