[英]python: union keys from multiple dictionary?
我有 5 部詞典,我想要它們的鍵的聯合。
alldict = [dict1, dict2, dict3, dict4, dict5]
我試過了
allkey = reduce(lambda x, y: set(x.keys()).union(y.keys()), alldict)
但它給了我一個錯誤
AttributeError: 'set' object has no attribute 'keys'
我做錯了嗎? 我使用普通的 forloop 但我想知道為什么上面的代碼不起作用。
我認為@chuck已經回答了為什么它不起作用的問題,但更簡單的方法是記住union
方法可以采用多個參數:
allkey = set().union(*alldict)
做你想要的沒有任何循環或lambdas。
您的解決方案適用於列表中的前兩個元素,但隨后dict1
和dict2
被縮減為一個集合,該集合將作為x
放入lambda中。 所以現在x
沒有方法keys()
了。
解決方案是從一開始就通過使用空集(這恰好是並集的中性元素)初始化減少來使x成為集合。
嘗試使用初始化程序:
allkey = reduce(lambda x, y: x.union(y.keys()), alldict, set())
沒有任何lambdas的替代方案是:
allkey = reduce(set.union, map(set, map(dict.keys, alldict)))
非功能性神經元的簡單策略(雙關語):
allkey = []
for dictio in alldict:
for key in dictio:
allkey.append(key)
allkey = set(allkey)
我們可以使用set comprehensions將此代碼轉換為更多的分類器形式:
allkey = {key for dictio in alldict for key in dictio}
與傳統的for循環相比,這種單行程仍然非常易讀。 將嵌套循環轉換為列表或集合理解的關鍵是將內部循環(在嵌套循環中變化得更快的循環)寫為最后一個索引(即, for key in dictio
)。
set().union(dict1.keys(),dict2.keys()...)
我嘗試了這個列表並且它沒有工作所以只是把它放在這里給任何人。
只是一個方法,'因為什么干草:
a={}; [ a.update(b) for b in alldict ] and a.keys()
或者稍微有點神秘
reduce(lambda a, b: a.update(b) or a, alldict, {}).keys()
(我很遺憾沒有相當於的內置功能
def f(a,b):
r = {}
r.update(a)
r.update(b)
return r
在那兒?)
如果你只想合並 2 個字典的鍵,你可以使用 operator |
.
引用文檔:
返回一個新集合,其中包含集合中的元素和所有其他元素。
例子:
all_keys = (dict1.keys() | dict2.keys())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.