回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想在python3中填充一个嵌套字典,但是我不知道如何干净地完成这个任务。我想要一个更新函数,它的工作方式如下:</p>
<pre><code>#pseudo code for the update given One and Two:
One = ('W/X/Y/Z.py', 1, 8)
Two = ('A/B/C/D.py', 12, 42)
#blank initialization
Dict = dict()
#structure gets created based on the path in Two
def updateDict(One, Two):
tuple = (1, 8, 12, 42)
try:
Dict["A"]["B"]["C"]["D.py"]['W/X/Y/Z.py'].append(tuple)
except:
Dict["A"]["B"]["C"]["D.py"]['W/X/Y/Z.py'] = [tuple]
#where:
#Dict["A"] is now a dict,
#Dict["A"]["B"] is now a dict,
#Dict["A"]["B"]["C"] is now a dict and
#Dict["A"]["B"]["C"]["D.py"] is now a dict
#Dict["A"]["B"]["C"]["D.py"]["W/X/Y/Z.py"] is now a list of tuples with four values
</code></pre>
<pre><code>Iteratively given
One = ('W/X/Y/Z.py', 1, 8)
Two = ('A/B/C/D.py', 12, 42)
One = ('W/X/Y/Z.py', 50, 60)
Two = ('A/B/C/D.py', 90, 100)
One = ('W/X/Y/NOTZ.py', 3, 14)
Two = ('A/B/C/D.py', 15, 22)
One = ('W/X/Y/Z.py', 14, 62)
Two = ('A/B/C/NOTD.py', 13, 56)
</code></pre>
<pre><code>#Would produce the following structure:
Dict =
{"A": {
"B": {
"C": {
"D.py": {
"W/X/Y/Z.py" : [(1,8,12,42), (50,60,90,100)],
"W/X/Y/NOTZ.py" : [(3,14,15,22)]
},
"NOTD.py": {
"W/X/Y/Z.py" : [(14,62,13,56)]
}
}
}
}}
</code></pre>
<pre><code>This can be made using the following commands:
Dict = dict()
Dict["A"] = dict()
Dict["A"]["B"] = dict()
Dict["A"]["B"]["C"] = dict()
Dict["A"]["B"]["C"]["D.py"] = dict()
Dict["A"]["B"]["C"]["D.py"]["W/X/Y/Z.py"] = [(1,8,12,42), (50,60,90,100)]
Dict["A"]["B"]["C"]["D.py"]["W/X/Y/NOTZ.py"] = [(3,14,15,22)]
Dict["A"]["B"]["C"]["NOTD.py"] = dict()
Dict["A"]["B"]["C"]["NOTD.py"]["W/X/Y/Z.py"] = [(14,62,13,56)]
</code></pre>
<p>所以Dict[“A”][“B”][“C”]会返回一个字典:</p>
<pre><code>dict(
"D.py": {
"W/X/Y/Z.py" : [(1,8,12,42), (50,60,90,100)],
"W/X/Y/NOTZ.py" : [(3,14,15,22)]
},
"NOTD.py": {
"W/X/Y/Z.py" : [(14,62,13,56)]
}
)
</code></pre>
<p>Dict[“A”][“B”][“C”][“D.py”]将返回一个字典:</p>
<pre><code>dict(
"W/X/Y/Z.py" : [(1,8,12,42), (50,60,90,100)],
"W/X/Y/NOTZ.py" : [(3,14,15,22)]
)
</code></pre>
<p>Dict[“A”][“B”][“C”][“D.py”][“W/X/Y/Z.py”]将返回元组列表:</p>
<pre><code>[(1,8,12,42), (50,60,90,100)]
</code></pre>
<p>所以所有的嵌套值都是字典,但所有的叶子都是元组列表</p>
<p>一个和两个字符串中的路径在以文件名结尾之前可以是任意长度和值(因此可以得到W/X/Y/Z.py或W/X/AA.py或Q/R/S/T/U/V.py)</p>
<p>任何可能有助于这一点的包裹将不胜感激</p>