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

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

如何有效地執(zhí)行字典合并?

如何有效地執(zhí)行字典合并?

溫溫醬 2022-10-06 16:50:50
對于我正在解決的問題,我有一個字典列表。問題涉及表單的多個查詢merge(a, b, c)。合并意味著,在結(jié)果中,公共鍵的計數(shù)被添加/減去,并且不常見的鍵(及其值)按原樣附加。我目前正在使用 Pythoncollection.Counter來表示字典并執(zhí)行如下合并:def merge(a, b, c):    counter_a, counter_b, counter_c = DICTLIST[a],DICTLIST[b],DICTLIST[c]    total = counter_a + counter_b - counter_c # Type collections.Counter    return total雖然這是一個方便的解決方案,但在問題中,最多可以有 10**5 個這樣的查詢。在這樣的規(guī)模上,使用這種方法太慢了。有沒有更好的方法來解決這個問題?注意:合并查詢的預(yù)計算是不切實際的,因為可能的輸入數(shù)量非常大。例子:DICTLIST[a] = Counter({1:5,2:10})DICTLIST[b] = Counter({2:10,3:20})DICTLIST[c] = Counter({1:2})merge(a,b,c) # Expected Output: {1:3, 2:20, 3:20}
查看完整描述

3 回答

?
一只名叫tom的貓

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

我的第一個直覺是尋找類似 Javascript “spread” 的 Python 運算符:

https://mlpipes.com/object-spread-operator-python/

這里的例子:

old_dict = {'hello': 'world', 'foo': 'bar'}
new_dict = {**old_dict, 'foo': 'baz'}

對于您的代碼,您應(yīng)該嘗試以下操作:

DICTLIST[d] = {**a,**b,**c}


查看完整回答
反對 回復(fù) 2022-10-06
?
POPMUISE

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

你可以在這里使用 **kwargs


x={1:5,2:10}

y={2:10,3:20}

z={**x, **y}

如果您想進一步優(yōu)化性能,因為有多個查詢,您應(yīng)該使用“緩存+字典”,因為查找表總是比任何操作都快


查看完整回答
反對 回復(fù) 2022-10-06
?
MM們

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

嘗試這個 -


def mergeDict(dict1, dict2):

    dict3 = {**dict1, **dict2}

    for key, value in dict3.items():

    if key in dict1 and key in dict2:

        dict3[key] = value + dict1[key]

    return dict3

然后你可以這樣打電話 -


# Create first dictionary

dict1 = {1:5,2:10}


# Create second dictionary

dict2 = {2:10,3:20}


# Create third dictionary

dict3 = {1:-2}


dict4 = mergeDict(dict3, mergeDict(dict1, dict2))

請注意,減法邏輯的第三個字典中有“-2”。


查看完整回答
反對 回復(fù) 2022-10-06
  • 3 回答
  • 0 關(guān)注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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