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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從超字符串中去除子字符串

從超字符串中去除子字符串

慕田峪4524236 2021-11-16 10:50:39
我有一個(gè)字典,它的鍵是一個(gè)字符串元組,值是它的頻率,例如 {('this','is'):2,('some','word'):3....}我需要消除一些包含這些子鍵的鍵,例如:d={('large','blue'):4,('cute','blue'):3,('large','blue','dog'):2,  ('cute','blue','dog'):2,('cute','blue','elephant'):1}我需要消除,('large','blue')因?yàn)樗怀霈F(xiàn)在'large blue dog'但是我不能刪除“可愛的藍(lán)色”,因?yàn)樗霈F(xiàn)在'cute blue dog'和'cute blue elephant'd={('large','blue'):4,('cute','blue'):3,('large','blue','dog'):2,('cute','blue','dog'):2,('cute','blue','elephant'):1}final_list=[]for k,v in d.items():    final_list.append(' '.join(f for f in k))final_list=sorted(final_list, key=len,reverse=True)completed=set()for f in final_list:    if not completed:        completed.add(f)    else:        if sum(f in s for s in completed)==1:            continueprint(final_list)print(completed)但這只給了我 ['可愛的藍(lán)象'] 我需要[large blue dog] :2[cute blue dog]:2[cute blue elephant]:1[cute blue]:3
查看完整描述

3 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

更新。如果您也想要計(jì)數(shù),我寧愿將大部分代碼重寫為:


d={('large','blue'):4,('cute','blue'):3,('large','blue','dog'):2,

('cute','blue','dog'):2,('cute','blue','elephant'):1}


completed = {}

for k,v in d.items():

     if len([k1 for k1,v1 in d.items() if k != k1 and set(k).issubset(set(k1))]) != 1:

         completed[k] = v


print(completed)

結(jié)果


{('cute', 'blue'): 3, ('large', 'blue', 'dog'): 2, ('cute', 'blue', 'dog'): 2, ('cute', '藍(lán)色', '大象'): 1}


我還沒有檢查性能。我就交給你了。


--


換個(gè)怎么樣


for f in final_list:

    if not completed:

        completed.add(f)

    else:

        if sum(f in s for s in completed)==1:

            continue


for f in final_list:

    if len([x for x in final_list if f != x and f in x]) != 1:

        completed.add(f)

這是你想要的?


查看完整回答
反對(duì) 回復(fù) 2021-11-16
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

這應(yīng)該有效:


previous = " "

previousCount = 0

for words in sorted([ " ".join(key) for key in d ]) + [" "]:

    if words.startswith(previous):

        previousCount += 1

    else:

        print(previous,previousCount)

        if previousCount < 2 and previous != " ":

            del d[tuple(previous.split(" "))]

        previous = words

        previousCount = 0


查看完整回答
反對(duì) 回復(fù) 2021-11-16
?
江戶川亂折騰

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊

必須有更有效的(非O(n^2))方法來做到這一點(diǎn),但這似乎是您想要的:


input = {

    ('large','blue'): 4,

    ('cute','blue'): 3,

    ('large','blue','dog'): 2,

    ('cute','blue','dog'): 2,

    ('cute','blue','elephant'): 1,

}


keys = set(' '.join(k) for k in input)

filtered = {

    tuple(f.split())

    for f in keys

    if sum(f != k and f in k for k in keys) == 1

}

result = {k: v for k, v in input.items() if k not in filtered}


from pprint import pprint

pprint(sorted(result.items()))

結(jié)果:


[(('cute', 'blue'), 3),

 (('cute', 'blue', 'dog'), 2),

 (('cute', 'blue', 'elephant'), 1),

 (('large', 'blue', 'dog'), 2)]

根據(jù)您的要求,這個(gè)想法是將出現(xiàn)一次的鍵識(shí)別為其他鍵的一部分。


查看完整回答
反對(duì) 回復(fù) 2021-11-16
  • 3 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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