我创建了一个没有任何键的字典实例:值对,标准
/tmp/contextBroker.log
然后,我将从API中返回一些信息,以便根据某些变量 name 添加到此词典中。
dict = {}
但是,我似乎得到了类似于此的错误*假设str(some_variable1)等于some_variables_name1 = str(some_variable1)
dict[some_variables_name1] += [{ 'key1': value1 }]
some_variables_name2 = str(some_variable2)
dict[some_variables_name2] += [{ 'key2': value2 }]
:
'foo'
任何专业提示?
答案 0 :(得分:3)
您必须首先检查dictionary
中的“foo”作为关键字。
您可以尝试:
if "foo" in dict_name:
dict_name.append("new_append")
else:
dict_name["foo"] = ["first entry"]
小建议:不要将dict
用作字典变量,因为它在Python中是关键字
答案 1 :(得分:3)
@Harsha是对的。
此:
dict[some_variables_name1] += [{ 'key1': value1 }]
会这样做:
dict[some_variables_name1] = dict[some_variables_name1] + [{ 'key1': value1 }]
需要先评估右手边,因此会尝试查找:
dict[some_variables_name1]
哪个会失败。
答案 2 :(得分:3)
其他答案已经解决了为什么会失败,这是一个方便的解决方案,如果密钥不存在则设置默认值,这样您的追加不会失败。 我读它的方式,你想要一个字典与其他字典列表作为值。想象一下像
这样的情况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 }]
分为:
somedict.setdefault(some_variables_name,[]).append({'somekey':somevalue})
我希望这能回答你的问题。
答案 3 :(得分:3)
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})
答案 4 :(得分:1)
创建新词典使用:
dict = dict()
当您尝试添加使用的内容时:
+=
没有什么可补充的。你必须先创建值
dict[some_variables_name1] = [{ 'key1': value1 }]
同样建议不要使用dict
..简单的d
,这意味着dict是前进的方向。
答案 5 :(得分: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'} “