2015-04-19 166 views
1

好吧我搜索了,但我沒有找到我的具體問題的答案。我正在創建一個列表字典。我有while循環創造價值的幾個列表,以及一個名稱與其關聯:Python創建一個列表字典

dict = {} 
list = [1, 2] 
name = key1 
list = [3, 4] 
name = key1 

如果名字是一樣的,該列表將被追加到了關鍵現有的一套價值觀。這裏是代碼我有:

if key in dict: 
    dict[key].append(list) 
else: 
    dict[key] = list 

這是我想的輸出:

字典= { 'KEY1':[1,2],[3,4]}

但是我一直得到這樣的輸出:

字典= { 'KEY1':[1,2,[3,4]]}

其中密鑰的第二個列表被放入第一個列表中。

+3

在您需要的輸出,你似乎有鍵有2個值。這不會發生。它應該是dictionary ='{'key1':[[1,2],[3,4]]}或h 2值。這不會發生。它應該是dictionary ='{'key1':[1,2,3,4]}' – Leon

+2

不會將變量命名爲'list'和'dict',因爲它們會影響內建的結果 –

回答

4

這是一個非常常見的錯誤。我相當肯定,你正在做的:

list1.append(list2)

相反,你想做的事:

list1.extend(list2)

這裏是一個very useful resource

不過,既然你想要,而不是[[1,2], [3,4]]你應該這樣做:

if key in d1: 
    d1[key].append(l1) 
else: 
    d1[key] = [l1] 
+0

這樣會更好一些,但extend給了我:dict = {[1,2,3,5]}而不是dict = {[1,2],[3,4]} – MarcAlex

+1

@MarcAlex,你是什麼意思由[1,2], [3,4]'?這是不可能的。一本字典不能有同一個鍵的多個值。你是不是指'[[1,2],[3,4]] – sshashank124

+0

是的,我想我的意思是在詞典中創建一個列表清單。所以我會在字典中[[1,2],[3,4]]。 – MarcAlex

2

這是因爲您每次都將列表追加到列表中。您需要使用擴展。代碼:

keys = ['name1', 'name2', 'name2', 'name1'] 
somelist = [1, 2, 3] 
d = {} 
for k in keys: 
    d.setdefault(k, []).extend(somelist) 
1

希望不要誤解,因爲字典= { 'KEY1':[1,2],[3,4]}甚少在字典表示

def add2dict(d, l, k): 
    if not k in d: 
    dict[k] = [] 
    d[k].append(l) 

dict = {} 
add2dict(dict, [1,2], "key1") 
add2dict(dict, [3,4], "key1") 

結果:

{ '鍵1':[[1,2],[3,4]}

2

你需要其實名單列表,你的輸出將是這樣的:

字典= { 'KEY1':[[1,2],[3,4]]}

有一個鍵相關聯的多個值可以使用此行:

dictionary.setdefault(key, []).append(a_list) 

如果密鑰不存在於您的字典中,setdefault將會將該密鑰與默認值[]相關聯。

此外,您應該避免使用dictlist來定義您自己的變量,它們是built-in並且您正在重新定義它們。

編輯

爲了明顯地向讀者也許這可以幫助,一個交互的Python會話其輸出:

>>> d = {} 
>>> d.setdefault('key1', []).append([1, 2]) 
>>> d.setdefault('key1', []).append([3, 4]) 
>>> d 
{'key1': [[1, 2], [3, 4]]} 
+0

dictionary = {} .... dictionary.setdefault(「key」,[])。append([1,2])....我喜歡這個:) –

+1

@MarcAlex這是最好的解決方案 –