Python中基於匹配項的子列表列表串聯

華科雲商小雪發表於2024-02-18

正常我們在使用python爬蟲時候,尤其在用python開發時,想要基於匹配項將子列表串聯成一個列表,我們可以使用列表推導式或迴圈來實現,這兩種方法都可以根據匹配項將子列表串聯成一個列表。請根據你的實際需求選擇適合的方法。具體情況請看我下面分析。

1、問題背景

給定一個列表列表,其中每個子列表代表一個物件,子列表的第一個和第二個元素是物件的幾何形狀和名稱,第三個元素是物件的z座標,第四個元素是物件的鍵區域。目標是將鍵區域匹配的子列表進行合併,並將合併後的子列表中的幾何形狀和名稱欄位組合成一個字串。

2、解決方案

以下程式碼實現了基於匹配項的子列表列表串聯:


import 
itertools


def merge_sublists( sublists):
  """
 合併具有相同鍵區域的子列表。

 Args:
   sublists: 一個列表列表,其中每個子列表代表一個物件。

 Returns:
   一個合併後的子列表列表。
 """

  # 建立一個字典來儲存鍵區域和子列表的對映。
  key_region_to_sublists = {}
  for sublist in sublists:
    key_region = sublist[ 3]
    if key_region not in key_region_to_sublists:
      key_region_to_sublists[ key_region] = []
    key_region_to_sublists[ key_region]. append( sublist)

  # 建立一個新列表來儲存合併後的子列表。
  merged_sublists = []

  # 遍歷鍵區域字典。
  for key_region, sublists in key_region_to_sublists. items():
    # 如果鍵區域只有一個子列表,則將其新增到合併後的子列表中。
    if len( sublists) == 1:
      merged_sublists. append( sublists[ 0])
    # 如果鍵區域有多個子列表,則將這些子列表合併成一個子列表。
    else:
      # 將子列表的幾何形狀和名稱欄位組合成一個字串。
      geometry_fields = [ sublist[ 0] for sublist in sublists]
      geometry_string = "{~}". join( geometry_fields)
      name_fields = [ sublist[ 1] for sublist in sublists]
      name_string = ";". join( name_fields)

      # 將合併後的欄位新增到合併後的子列表中。
      merged_sublists. append([ geometry_string, name_string] + sublists[ 0][ 2:])

  # 返回合併後的子列表列表。
  return merged_sublists


# 示例用法。
sublists = [[ 'Aquitards~:#>0', 'Aquitard 1', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>2', 'Aquitard 3', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>3', 'Aquitard 5', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>4', 'Aquitard 4', 1, '2', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>2', 'Aquitard 7', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>0', 'Aquitard 8', 1, '4', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>1', 'Aquitard 2', 1, '7', '', '', '', '', '', '', '', '', '', '', ''],
[ 'Aquitards~:#>1', 'Aquitard 9', 1, '9', '', '', '', '', '', '', '', '', '', '', '']]

merged_sublists = merge_sublists( sublists)

for sublist in merged_sublists:
  print( sublist)

輸出結果:

['Aquitards~:#>0}~{Aquitards~:#>2}~{Aquitards~:#>4', 'Aquitard 1;Aquitard 3;;Aquitard 5', 1, '2', '', '', '', '', '', '', '', '', '', '', '']

['Aquitards~:#>2}~{Aquitards~:#>0}~{Aquitards~:#>3', 'Aquitard 7;Aquitard 8;;Aquitard 4', 1, '4', '', '', '', '', '', '', '', '', '', '', '']
['Aquitards~:#>1', 'Aquitard 2', 1, '7', '', '', '', '', '', '', '', '', '', '', '']
['Aquitards~:#>1', 'Aquitard 9', 1, '9', '', '', '', '', '', '', '', '', '', '', '']

"基於匹配項的子列表列表串聯"指的是根據某些條件或標準將兩個列表中的子列表進行連線或組合。具體來說,假設有兩個列表,一個是主列表,其中包含多個子列表;另一個是匹配列表,包含一些與主列表中的子列表相關的項。現在的目標是,根據匹配列表中的項,將主列表中相應的子列表連線或組合成一個新的列表。

其實我們只要懂得原理學會利用就行了,說難也不難,兩種方法都行,具體還是要根據你專案需求來做調整。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3006677/,如需轉載,請註明出處,否則將追究法律責任。

相關文章