我有一個 python 串列串列我想將所有包含串列與至少 1 個公共元素合并并洗掉類似的專案
我有一大組資料,它是一個串列串列,其中一些包含串列中有一些公共資料,我想將所有串列與公共資料合并
# sample data
foo = [
[0,1,2,6,9],
[0,1,2,6,5],
[3,4,7,3,2],
[12,36,28,73],
[537],
[78,90,34,72,0],
[573,73],
[99],
[41,44,79],
]
# i want to get this
[
[0,1,2,6,9,5,3,4,7,3,2,78,90,34,72,0],
[12,36,28,73,573,73,573],
[99],
[41,44,79],
]
甚至包含一個共同元素的元素它們被組合在一起
原始資料檔案是這個
編輯
這就是我正在嘗試的
import json
data = json.load(open('x.json')) # https://files.catbox.moe/y1yt5w.json
class Relations:
def __init__(self):
pass
def process_relation(self, flat_data):
relation_keys = []
rel = {}
for i in range(len(flat_data)):
rel[i] = []
for n in flat_data:
if i in n:
rel[i].extend(n)
return {k:list(set(v)) for k,v in rel.items()}
def process(self, flat_data):
rawRelations = self.process_relation(flat_data)
return rawRelations
rel = Relations()
print(json.dumps(rel.process(data), indent=4), file=open('out.json', 'w')) # https://files.catbox.moe/n65tie.json
注意 - 資料中存在的最大數字將等于串列串列的長度
uj5u.com熱心網友回復:
一個簡單的(并且可能不是最佳的)演算法,可以修改輸入資料:
target_idx = 0
while target_idx < len(data):
src_idx = target_idx 1
did_merge = False
while src_idx < len(data):
if set(data[target_idx]) & set(data[src_idx]):
data[target_idx].extend(data[src_idx])
data.pop(src_idx) # this was merged
did_merge = True
continue # with same src_idx
src_idx = 1
if not did_merge:
target_idx = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532653.html
下一篇:使用回圈和物件的密碼驗證器
