列表的Python字典,使用变量键

时间:2017-04-13 20:43:08

标签: python dictionary

我想使用字典,字符串作为键类型,字符串列表作为值类型。

myDict = {}

def addToDictionary(key_str, val_str):
    myDict[key_str].append(val_str)

>>KeyError

我的问题是,为什么这不起作用?如果key_str在dict中不存在,那么它应该创建它并在值列表中附加val_str。对我来说似乎很简单,不知道为什么python会抱怨。

4 个答案:

答案 0 :(得分:3)

您正在寻找setdefault方法:

myDict.setdefault(key_str, []).append(val_str)

第一次,key_str在字典中不存在,因此python会将其初始化为包含一个元素的列表(val_str),第二次python将使用append方法

这里是文档:

  

setdefault(...)       D.setdefault(k [,d]) - > D.get(k,d),如果k不在D

中,也设置D [k] = d

答案 1 :(得分:2)

Python中的内置字典类没有默认值。 Python怎么可能知道它应该是什么,因为值可以是任何类型的?您想要的是来自defaultdict库的collections

from collections import defaultdict

# this establishes list as the default factory
myDict = defaultdict(list)

def addToDictionary(key_str, val_str):
    myDict[key_str].append(val_str)

答案 2 :(得分:0)

您几乎已回答了自己的问题:如果 myDict 中不存在 key_str ,则myDict [key_str]是一个keyError,而不是一个空列表。虽然您可以附加到空列表[],但不能附加到不存在的列表中。

简而言之,在这种情况下,内置的 dict 并没有读懂你的想法。

答案 3 :(得分:0)

尚未创建字典键。你试图在不起作用的同时追加并创建一个密钥。

我推荐Iafishers解决方案似乎最好

def KeyGen(key_str, val_str):
    myDict[key_str] = val_str

def AddToDictionary(key_str, val_str):
    myDict[key_str].append(val_str)


KeyGen('testing', [1,2,3])

AddToDictionary('testing', 4)

print myDict