第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

json中找到相關(guān)聯(lián)數(shù)字的程序?

json中找到相關(guān)聯(lián)數(shù)字的程序?

暮色呼如 2019-03-27 22:19:47
str={'Tom':'1,2,3','Jack':'1,5,9','Bob':'2','Li':'2,7'}在Tom的數(shù)字中發(fā)現(xiàn)有1,那就要把Jack的5,9給Tom;在Tom的數(shù)字中發(fā)現(xiàn)有2,那就要把Li的7給Tom,Bob只有一個2,沒有其他數(shù)字,沒法給;在Tom的數(shù)字中發(fā)現(xiàn)有3,Jack、Bob、Li都沒有3,沒法給;...最后得出:str_related={'Tom':'5,9,7','Jack':'2,3','Bob':'1,3,7','Li':'1,3'}不知道描述清楚沒?真實的情況:人員很多,至少10k,數(shù)字至少100k怎么高效寫這段程序?謝謝
查看完整描述

3 回答

?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

算法可以歸納為集合運算,可轉(zhuǎn)化為整數(shù)的位運算,達到高效目的。 說明如下圖:

https://img1.sycdn.imooc.com//5cc14e5100017dce06730697.jpg

查看完整回答
反對 回復(fù) 2019-04-25
?
HUX布斯

TA貢獻1876條經(jīng)驗 獲得超6個贊

可以如此拆分


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

    })

 }

因為不知道你這些參數(shù)是不是確定的,所以大概這么寫


后續(xù)才發(fā)現(xiàn) 你要的是php寫法,我上面是js寫法 ,可以看看思路~~~~


查看完整回答
反對 回復(fù) 2019-04-25
?
九州編程

TA貢獻1785條經(jīng)驗 獲得超4個贊

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)

結(jié)果:


{'Jack': {2, 3}, 'Tom': {9, 5, 7}, 'Li': {1, 3}, 'Bob': {1, 3, 7}}

優(yōu)化~


先計算一遍,保存有效集合,避免不必要的重復(fù)計算。


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)


查看完整回答
反對 回復(fù) 2019-04-25
  • 3 回答
  • 0 關(guān)注
  • 528 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號