您好,欢迎访问一九零五行业门户网

json中找到相关联数字的程序?

问题
str={'tom':'1,2,3','jack':'1,5,9','bob':'2','li':'2,7'}
在tom的数字中发现有1,那就要把jack的5,9给tom;
在tom的数字中发现有2,那就要把li的7给tom,bob只有一个2,没有其他数字,没法给;
在tom的数字中发现有3,jack、bob、li都没有3,没法给;
...
最后得出:
str_related={'tom':'5,9,7','jack':'2,3','bob':'1,3,7','li':'1,3'}
不知道描述清楚没?
真实的情况:人员很多,至少10k,数字至少100k
怎么高效写这段程序?谢谢
答案1:
可以如此拆分
const objlast = {} const temptom = [] const tom = str['tom'].solit(',') tom.map((item, i)=> { for(let key in str) { if(key != 'tom') { temptom.concact(getlastofarr(str[key].split(','), item)) } } }) objlast.tom = temptom.join() function getlastofarr(arr, removekey) { return arr.filter((item, index) => { item != removekey }) }
因为不知道你这些参数是不是确定的,所以大概这么写
后续才发现 你要的是php写法,我上面是js写法 ,可以看看思路~~~~
答案2:
python3 set
data = {'tom':{1,2,3},'jack':{1,5,9},'bob':{2},'li':{2,7}} rslt = {} for k in data: s=set() for x in data: if k!=x: s |= data[k]&data[x] and data[x]-data[k] rslt[k] = s print(rslt)
结果:
{'jack': {2, 3}, 'tom': {9, 5, 7}, 'li': {1, 3}, 'bob': {1, 3, 7}}
优化~
先计算一遍,保存有效集合,避免不必要的重复计算。
data = {'tom':{1,2,3},'jack':{1,5,9},'bob':{2},'li':{2,7}} valid = {} # 有效值 for k in data: for x in data: key = '%s-%s'%(x, k) if k != x \ and (key not in valid) \ and data[k] & data[x] \ and data[x] - data[k] \ : valid[key] = data[x] - data[k] rslt = {} for k in data: s=set() for x in data: s |= valid.get('%s-%s'%(x, k),set()) rslt[k] = s print(rslt)
其它类似信息

推荐信息