簡體   English   中英

將 dict 轉換為 defaultdict

[英]Cast dict to defaultdict

以下代碼使用 {} 運算符組合兩個 defaultdict。

from collections import defaultdict
aa=defaultdict(str)
bb=defaultdict(str)
aa['foo']+= '1'
bb['bar']+= '2'
cc = {**aa,**bb}
type(cc)

但是,正如我們看到的,如果我們運行它, {}運算符返回一個dict類型而不是一個defaultdict類型。

有沒有辦法將dict回 defaultdict?

您可以在調用defaultdict直接使用解包。 defaultdictdict的子類,並將這些參數傳遞給其父類以創建字典,就像它們已傳遞給dict

cc = defaultdict(str, **aa, **bb)
# defaultdict(<class 'str'>, {'bar': '2', 'foo': '1'})

你可以做很長的路。 這種方法的好處是你不需要重新指定defaultdict的類型:

def merge_two_dicts(x, y):
    z = x.copy()
    z.update(y)
    return z

cc = merge_two_dicts(aa, bb)

在單個表達式中解包有效但效率低下:

n = 500000

d1 = defaultdict(int)
d1.update({i: i for i in range(n)})
d2 = defaultdict(int)
d2.update({i+n:i+n for i in range(n)})

%timeit defaultdict(int, {**d1, **d2})  # 150 ms per loop
%timeit merge_two_dicts(d1, d2)         # 90.9 ms per loop

defaultdict構造函數可以接受兩個參數,其中第一個是用於默認值的函數,第二個是映射 (dict)。 它從傳入的字典中復制鍵/值。

 >>> d = defaultdict(list, {'a': [1,2,3]})
 >>> d['a']
 [1, 2, 3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM