2017-05-22 106 views
0

我有一個如下所示的代碼。雖然它有效,但我想知道更緊湊的實現。是否有可能將這些代碼實現爲一個或兩個內襯?從字典數組中創建單行唯一鍵列表

all_keys = [] 
dic_list = [{'apple': None, 'banana': None}, {'grape': 1, 'apple':None}] 
for d in dic_list: 
    for k in d.keys(): 
     if k not in all_keys: all_keys.append(k) 
print(all_keys) # ['apple', 'banana', 'grape'] all unique keys 
+0

您的問題已回答?如果是這樣,請用旁邊的複選框標記正確的答案 - 這有利於你,回答者和社區。如果還沒有回答,缺少什麼? –

回答

1

你可以使用一組,這會強制元素是不能重複(用花括號{}標):

all_keys = {k for d in dic_list for k in d.keys()} 
# {'apple', 'banana', 'grape'} 

這種策略比循環更有效,而且意圖更清晰。

2

這應該做你想要什麼:

list(set(val for dic in dic_list for val in dic.keys())) 

輸出:

['grape', 'apple', 'banana'] 
+0

它的一條線,但它的長度和速度比它要慢 – donkopotamus

+1

都是很好的答案,但這個和@ aryamccarthy的答案更容易理解,我認爲。 – hallazzang

3

只需使用set.union跨詞典:

>>> set().union(*dic_list) 
{'apple', 'banana', 'grape'} 

這種方法比快雙循環(如set(val for dic in dic_list for val in dic.keys()))

0

從這個問題,我推斷是一個較短的實現,它以排序的方式打印鍵。

dic_list = [{'apple': None, 'banana': None}, {'grape': 1, 'apple':2}] 
all_keys = sorted({k for d in dic_list for k in d.keys()}) 
print(all_keys) 

我們可以使用Python的功能強大的列表/設置/字典內涵與代碼相對較少行來實現這一目標。

希望這會有所幫助。