2017-09-04 119 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