簡體   English   中英

python:來自多個字典的聯合鍵?

[英]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。

您的解決方案適用於列表中的前兩個元素,但隨后dict1dict2被縮減為一個集合,該集合將作為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.

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