2017-09-04 121 views
1

我有一本字典,如:Python字典包含list/set作爲值。如何追加/添加新元素?

myDict = { 
      'C1' : [10,20,30] 
      'C2' : [20,30,40] 
     } 

我想通過追加列表更新該值。我拿出

一種方法是

temp_list = myDict.get('C1', []) 
temp_list.append(99) 
myDict['C1'] = temp_list 

但它是一個有點冗長。

有沒有更優雅/ pythonic的方式來做到這一點?

我嘗試這樣做,但沒有成功

myDict.get('C1',[]).append(99) 

它不會成功寫入新的值到原始列表。有任何想法嗎?

謝謝!

回答

1

隨着defaultdict

from collections import defaultdict 

# for lists 
d = defaultdict(list) 
d['C1'].append(99) 

# for sets 
d = defaultdict(set) 
d['C1'].add(99) 

沒有它:

# for lists 
myDict['C1'] = myDict.get('C1', []) + [99] 

# for sets 
myDict['C1'] = myDict.get('C1', set()) | {99} 
+0

謝謝!對於設置值,還有一種更新方式:'myDict ['C1'] = myDict.get('C1',set()).update([99])' – JenkinsY

+1

@JenkinsY你可以'myDict' C1'] = myDict.get('C1',{})| {99}' –

+0

謝謝。原來我的上面的評論是錯誤的原因'更新'也沒有返回(太混亂)。另外,你的解決方案是錯誤的,因爲一個空集不能通過使用'{}'來初始化,它提供了一個字典。所以正確的方法可能是:'myDict ['C1'] = myDict.get('C1',set())| {99}' – JenkinsY

1

您應該使用dict.setdefault方法:

>>>myDict = {} 
>>>myDict.setdefault('C1', []).append(99) 
>>>myDict 
{'C1' : [99]} 
0

也許只是:或

#!/usr/bin/python 
myDict = { 
      'C1': [10,20,30], 
      'C2': [20,30,40] 
      } 
val = 60 

try: 
    myDict['C1'].append(val) 
except KeyError: 
    myDict['C1'] = [val] 
print myDict 
+0

如果'C1'在myDict中不存在,該怎麼辦? – JenkinsY

+0

你會擊中KeyError。好吧,我會更新答案,檢查是否存在密鑰。 – Tomasz

0

代替:

temp_list = myDict.get('C1', []) 
temp_list.append(99) 
myDict['C1'] = temp_list 

爲什麼不乾脆:

myDict['C1'] = myDict.get('C1', []).append(99) 
+0

這使得'myDict ['C1'] == None'因爲'append'方法不會返回任何東西! – JenkinsY

+0

True:/更簡單,現在我快速測試它:'myDict.get('C1',[])。append(99)'。 – Mathieu

0
if 'C1' in myDict:   
    myDict['C1'].append(99) 
else: 
    myDict['C1']=[99] 

try: 
    myDict['C1'].append(99) 
except KeyError: 
    myDict['C1']=[99] 
+0

這是正確的。但不認爲這是比我的第一個更好的解決方案。 – JenkinsY