Python 添加作为词典本身的词典项

Python 添加作为词典本身的词典项,python,dictionary,Python,Dictionary,考虑以下词典: dict1 = {"A":{"B":"C"}} print(dict1["A"]["B"]) 这印的是“C” 我现在可以这样修改我的字典了 dict1["A"]["B"] = "D" dict1["A"]["E"] = "F" dict1["B"] = "G" print(dict1) 输出是 {'A': {'B': 'D', 'E': 'F'}, 'B': 'G'} 但我不能这么做: dict1["C"]["H"] = ["I"] 然而,这是可行的: dict2 = {

考虑以下词典:

dict1 = {"A":{"B":"C"}}
print(dict1["A"]["B"])
这印的是“C”

我现在可以这样修改我的字典了

dict1["A"]["B"] = "D"
dict1["A"]["E"] = "F"
dict1["B"] = "G"
print(dict1)
输出是

{'A': {'B': 'D', 'E': 'F'}, 'B': 'G'}
但我不能这么做:

dict1["C"]["H"] = ["I"]
然而,这是可行的:

dict2 = {"H":"I"}
dict1["C"] = dict2
print(dict1)
输出:

{'A': {'B': 'D', 'E': 'F'}, 'B': 'G', 'C': {'H': 'I'}}
有没有不需要创建额外词典的替代方案


我只是为了学习这门语言,而不是为了一个具体的项目。 尽管如此,如果dict1中没有元素“C”,为什么dict1[“C”][“H”]=“I”]可以工作呢? 这样做:


这棵树只有一行。这是一个可爱的黑客贴,但工作相当不错

from collections import defaultdict
def tree(): return defaultdict(tree)

users = tree()
users['harold']['username'] = 'hrldcpr'
users['handler']['username'] = 'matthandlersux'

由于
defaultdict
,对未定义键的每次访问都会生成一个新值,并且由于递归,新值也将是一个新树。

您还没有创建字典
C
。在python中,在编辑它之前必须先创建它。像这样:

dict1 = {}
dict1["C"] = {} # First create it before modifying it
dict1["C"]["H"] = ["I"]
print(dict1)
让我解释一下

foomain["C"] = 'blah'
设定它,但是

foomain['C']['H'] = 'blah'
尝试查找
foomain['C']
,但失败。如果它成功了,它将使用该字典并使用其上的赋值运算符将
blah
赋值给
['C']['H']

就像说:

Okay, go find `foomain['C']`, then assign 'blah' to key 'H'
而不是:

Okay, assign 'blah' to `foomain['C']['H']`

换句话说,赋值和获取在python中是完全不同的。

您可以使用setdefault,它会在出现键错误时指定默认值

dict1.setdefault('C', {})['H'] = 'I'
或者您可以使用defaultdict代替dict

from collections import defaultdict
在上面的例子中,问题是
dict1[“C”]
尚未初始化,因此不知道它是否是dict,是否可以分配一个子元素,如
[“H”]
(或者它是否只是一个整数,分配给
[“H”]
将是一个错误)

有,使用defaultdict可以实现单级嵌套。但特别是当你刚开始的时候,你最好明确地处理这些事情

val = dict1.get("C")
if isinstance(val, dict)
    dict1["C"]["H"] = "I"
else
    dict["C"] = {"H": "I"}

您可以使用
defaultdict
。或
dict1.setdefault(“C”、{})[“H”]=“I”
“我只是在学习这门语言,而不是从事具体的项目。不过,任何帮助都将不胜感激。”“那也很好!”谢谢大家向我解释!
dict1["C"]["H"] = ["I"]
val = dict1.get("C")
if isinstance(val, dict)
    dict1["C"]["H"] = "I"
else
    dict["C"] = {"H": "I"}