簡體   English   中英

加入2個列表時添加空字符串-Python

[英]adding empty string while joining the 2 lists - Python

我有2個清單

mainlist=[['RD-12',12,'a'],['RD-13',45,'c'],['RD-15',50,'e']] and 
sublist=[['RD-12',67],['RD-15',65]]

如果我通過使用以下代碼基於第一要素條件加入兩個列表

def combinelist(mainlist,sublist):
   dict1 = { e[0]:e[1:] for e in mainlist }
   for e in sublist:
      try:
         dict1[e[0]].extend(e[1:])
      except:
         pass
   result = [ [k] + v for k, v in dict1.items() ]
   return result

結果如下

[['RD-12',12,'a',67],['RD-13',45,'c',],['RD-15',50,'e',65]]

因為它們在子列表中不是“ RD-13”的元素,所以我想在其上清空字符串。

最終輸出應為

[['RD-12',12,'a',67],['RD-13',45,'c'," "],['RD-15',50,'e',65]]

請幫我。

您可以只瀏覽結果列表,然后檢查元素總數是2而不是3。

for list in lists:
    if len(list) == 2:
        list.append(" ")

更新:

如果子列表中還有更多項目,只需減去包含列表的“鍵”的列表,然后添加所需的字符串即可。

def combinelist(mainlist,sublist):
   dict1 = { e[0]:e[1:] for e in mainlist }
   list2 = [e[0] for e in sublist]
   for e in sublist:
      try:
         dict1[e[0]].extend(e[1:])
      except:
         pass
   for e in dict1.keys() - list2:
       dict1[e].append(" ")
   result = [[k] + v for k, v in dict1.items()]
   return result

您可以使用while循環來解決問題,方法是通過附加所需的字符串來調整子列表的長度,直到與最長子列表的長度匹配為止。

for list in result:
    while len(list) < max(len(l) for l in result):
        list.append(" ")

您可以嘗試如下操作:

mainlist=[['RD-12',12],['RD-13',45],['RD-15',50]]
sublist=[['RD-12',67],['RD-15',65]]
empty_val = ''

# Lists to dictionaries
maindict = dict(mainlist)
subdict = dict(sublist)
result = []
# go through all keys
for k in list(set(list(maindict.keys()) + list(subdict.keys()))):
    # pick the value from each key or a default alternative
    result.append([k, maindict.pop(k, empty_val), subdict.pop(k, empty_val)])
# sort by the key
result = sorted(result, key=lambda x: x[0])

您可以根據需要設置空值。

更新

遵循新條件,它看起來像這樣:

mainlist=[['RD-12',12,'a'], ['RD-13',45,'c'], ['RD-15',50,'e']]
sublist=[['RD-12',67], ['RD-15',65]]

maindict = {a:[b, c] for a, b, c in mainlist}
subdict = dict(sublist)
result = []

for k in list(set(list(maindict.keys()) + list(subdict.keys()))):
    result.append([k, ])
    result[-1].extend(maindict.pop(k, ' '))
    result[-1].append(subdict.pop(k, ' '))

sorted(result, key=lambda x: x[0])

另一種選擇是將子列表轉換為字典,以便可以輕松快速地訪問項目。

sublist_dict  = dict(sublist)

因此,您可以這樣做(它修改了mainlist ):

for i, e in enumerate(mainlist):
  data: mainlist[i].append(sublist_dict.get(e[0], ""))
#=> [['RD-12', 12, 'a', 67], ['RD-13', 45, 'c', ''], ['RD-15', 50, 'e', 65]]

或一個班輪名單理解(它產生一個新名單):

[ e + [sublist_dict.get(e[0], "")] for e in mainlist ]


如果要跳過缺少的元素:

 for i, e in enumerate(mainlist): data = sublist_dict.get(e[0]) if data: mainlist[i].append(data) print(mainlist) #=> [['RD-12', 12, 'a', 67], ['RD-13', 45, 'c'], ['RD-15', 50, 'e', 65]] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM