我想创建一个字典,其中值是一个列表。现在有了每个新的传入密钥,我想开始一个新的列表。
如果我只是尝试附加到字典键值它会显示错误,因为该值尚未声明为列表,并且我不能在开始时执行此操作,因为我不知道我将拥有多少键。
例如(请注意,对于MyDict
keyList
是可变的,以前不知道的事情)
keyList = [['a',1,2],['b',3,4]]
MyDict={}
for key in keyList:
MyDict[key[0]].append(key[1:])
我想要创建的是:
MyDict={'a': [[1, 2]], 'b': [[3, 4]]}
有办法做到这一点吗?
答案 0 :(得分:1)
您可以使用setdefault
。
而不是MyDict[key[0]].append(key[1:])
尝试使用MyDict.setdefault(key[0],[]).append(key[1:])
因此,当您尝试附加值时,如果列表不存在,则会生成默认列表,然后向其附加值
答案 1 :(得分:1)
您需要的是defaultdict
,它完全是为了这个目的而提供的Python:
keyList = [['a',1,2],['b',3,4]]
MyDict=defaultdict(list)
for key in keyList:
MyDict[key[0]].append(key[1:])
print(MyDict)
<强>输出强>
defaultdict(<class 'list'>, {'b': [[3, 4]], 'a': [[1, 2]]})
defaultdict
在其构造函数中获取一个函数,该函数在没有参数的情况下调用以创建默认元素。不带参数的list
会创建一个空列表。
defaultdict
在所有其他方面表现得像普通词典。
但是,如果最终你想要一个简单的字典,那么使用dict
转换它:
print(dict(MyDict))
给出
{'b': [[3, 4]], 'a': [[1, 2]]}
答案 2 :(得分:0)
使用collections.defaultdict。例如:
from collections import defaultdict
d = defaultdict(lambda: [])
d['key'].append('value to be add in list')
Sidenote:Defaultdict采用可调用的参数,这意味着你也可以用这种方式创建你的dict:
defaultdict(list)