Python - 给空字典添加键值对

6

我创建了一个没有任何键值对的字典实例:标准

dict = {}

我会从API中获取一些信息,并根据一些变量名称将其添加到该字典中。

some_variables_name1 = str(some_variable1)

dict[some_variables_name1] += [{ 'key1': value1 }]

some_variables_name2 = str(some_variable2)

dict[some_variables_name2] += [{ 'key2': value2 }]

然而,我似乎遇到了类似于这个错误 *假设 str(some_variable1) 等于 'foo':

KeyError: 'foo'

有什么专业技巧吗?

你可以直接这样赋值:dict[some_variables_name1] = value1,对吧? - Vikas Periyadath
@VikasDamodar 是的,我希望value1成为更深层次的数据嵌套... - GCien
2
你能提供任何你期望的输出样例吗? - Vikas Periyadath
1
可能是Python字典键错误分配-我该如何解决?的重复问题。 - Aran-Fey
1
你可以定义你的 dict = defaultdict(list) 而不是 dict = {} - Abdul Niyas P M
显示剩余2条评论
6个回答

4

@Harsha是正确的。

这个:

dict[some_variables_name1] += [{ 'key1': value1 }]

好的:

dict[some_variables_name1] = dict[some_variables_name1] + [{ 'key1': value1 }]

需要先评估右侧,因此它将尝试查找:

dict[some_variables_name1]

这将会失败。


更Pythonic的方式... :) - Harsha Biyani

4

其他答案已经讨论了为什么这种方法会失效,这里提供一种方便的解决方案,可以设置默认值,即使键不存在也不会导致添加失败。 我理解您想要一个字典,其值为其他字典的列表。可以想象一种情况:

somedict = {}
somevar = 0
somevar_name = str(somevar)

key1 = "oh"
value1 = 1

你可以做的是:
somedict.setdefault(somevar_name,[]).append({key1,value1})

这将被计算为

{'0': [{'oh', 1}]}

换句话说,更改这种类型的行

somedict[some_variables_name] += [{ 'somekey': somevalue }]

Into:

somedict.setdefault(some_variables_name,[]).append({'somekey':somevalue})

我希望这能回答您的问题。

1
更Pythonic的方式... :) - Harsha Biyani

4
Pythonic的解决方案是为字典设置默认值。在我看来,collections.defaultdict 是最好的选择。
此外,请不要使用与类名称相同的变量名称。下面我将字典称为d
from collections import defaultdict

d = defaultdict(list)

some_variables_name1 = str(some_variable1)
d[some_variables_name1].append({'key1': value1})

some_variables_name2 = str(some_variable2)
d[some_variables_name2].append({'key2': value2})

2

您需要首先检查 "foo" 是否作为键存在于 dictionary 中。

您可以尝试以下方法:

if "foo" in dict_name:
    dict_name.append("new_append")
else:
    dict_name["foo"] = ["first entry"]

小建议:不要在Python中将字典变量命名为dict,因为它是Python中的关键字。


是的,我只是举个例子来代替问题。 - GCien

1
创建新字典使用:

dict = dict()

当您尝试添加内容时,使用以下代码:

+=

没有什么可添加的。你必须先创建这个值。

dict[some_variables_name1] = [{ 'key1': value1 }]

正如建议的那样,不要使用dict.. 一个简单的d代表字典是正确的方法。


1
@johnashu 你好,这个方法似乎不太行。还是谢谢你的帮助。(我没有给你点踩) - GCien
1
@johnashu 你的修改建议起作用了。当然,它不存在,所以不能使用 +=,只需要用 = 设置它。太蠢了!我会在可以时接受它作为正确答案。谢谢。 - GCien

0
如果字典只有一对键值对,我发现使用字典zip可能很方便(事先将所有键和值收集到单独的列表中,然后将它们压缩以构造一个新的字典,类似于添加那些字典)。
这是我的例子:

“我想让{c} = {{a},{b}}”

c = { }
a = {"100": "1.1"}
b = {"200": "1.2"}

# d and e just dummies
d = [ ]
e = [ ]
for item in [a, b]:
    d += list(item)
    e += list(item.values())

c = dict(zip(d,e))
print(c)

"  c  = {'100': '1.1', '200': '1.2'} “

抱歉,我刚刚发现字典更新更加方便。c = { } a = {"100": "1.1"} b = {"200": "1.2", "300":"1.3"} c.update(a) c.update(b) c "{'100': '1.1', '200': '1.2', '300': '1.3'}" - KokoEfraim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接