2014-07-01 55 views
2

我遍歷一個文件尋找每行中的某些屬性,如果行匹配,我想將它作爲一個項目插入到特定字典鍵的列表中。如何創建一個列表作爲Python中特定鍵的字典條目?

例如:

list_of_names = ['aaron', 'boo', 'charlie'] 
for name in list_of_names 
    if color contains 'a': 
     #add here: add to list in dict['has_a'] 
print dict['has_a'] 

應該打印[ '亞倫', '查理']。

我問這個問題的原因是因爲我不知道如何爲字典中的鍵創建多個條目。

回答

4

您可以使用python的defaultdict來達到此目的。它會自動生成一個列表作爲字典的默認值。

from collections import defaultdict 

mydict = defaultdict(list) 
list_of_names = ['aaron', 'boo', 'charlie'] 
for name in list_of_names: 
    if 'a' in name: 
     mydict['has_a'].append(name) 
print mydict['has_a'] 

輸出:

['aaron', 'charlie'] 

的OP已,他希望在他的字典裏異質值的評論表示。在這種情況下,defaultdict可能不合適,而應該只是特例處理這兩種情況。

# Initialize our dictionary with list values for the two special cases. 
mydict = {'has_a' : [], 'has_b' : []} 
list_of_names = ['aaron', 'boo', 'charlie'] 
for name in list_of_names: 
    if 'a' in name: 
     mydict['has_a'].append(name) 
    # When not in a special case, just use the dictionary like normal to assign values. 
print mydict['has_a'] 
+0

我寧願不這樣做,因爲我的許多其他鍵指的是布爾值而不是列表。我的字典中只需要2個列表。 – Michi

+0

@Michi,在這種情況下,只需將兩個特殊情況添加到您的循環中即可。我會更新答案。 – merlin2011

+0

它的工作原理 - 謝謝! – Michi

2

我認爲這是一個很好的用例爲dict對象的setdefault方法:

d = dict() 
for name in list_of_names: 
    if 'a' in name: 
    d.setdefault("has_a", []).append(name) 
0

可以使用key函數來獲取鍵列表,如果需要增加檢查。然後像往常一樣追加。

list_of_names = ['aaron', 'boo', 'charlie'] has_dictionary = {} for name in list_of_names: if name.find('a') != -1: if 'has_a' not in has_dictionary.keys(): has_dictionary['has_a'] = [] has_dictionary['has_a'].append(name) print(has_dictionary['has_a'])

相關問題