Python:Dictionary作为List的值 - 启动

时间:2017-01-16 07:12:35

标签: python

我想创建一个字典,其中值是一个列表。现在有了每个新的传入密钥,我想开始一个新的列表。 如果我只是尝试附加到字典键值它会显示错误,因为该值尚未声明为列表,并且我不能在开始时执行此操作,因为我不知道我将拥有多少键。 例如(请注意,对于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]]}

有办法做到这一点吗?

3 个答案:

答案 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)