[英]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.