<p>我知道你想做什么。您试图在python中避免<a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" rel="nofollow">DRY</a>。不幸的是,python和许多其他语言在这方面做得很差。在</p>
<p>不过,主要的问题是<strong>您将变量的名称与程序中的值混合在一起。这是许多编程语言中常见的错误。</strong></p>
<p>如果您真的想这样做,那么绑定到<code>fruit=...</code>变量的东西需要知道它的名称。在</p>
<ul>
<li>你是想说,在python中,“把这个dict移植到另一个dict上”。在</li>
<li>Python要求您这样说:“将这个dict移植到另一个dict上,将它附加到<code>"Fruit"</code>”</li>
<li>唯一的办法就是“水果”这个名字已经在某处存在了。但事实并非如此:它只存在于变量名中,而不存在于程序中。在</li>
</ul>
<p>有两种解决方案:</p>
<ul>
<li><p>您可以避免创建<code>fruit=...</code>变量,而是直接将其移植到<code>"Fruit"</code>名称中。因此,您只需输入“Fruit”一次,但是我们没有像您想要的那样键入<code>somedict["Fruit"]</code>,而是避免了输入变量名。这是通过匿名编程实现的:</p>
<pre><code>somedict["Fruit"] = {'red':'apple', 'yellow':'banana'}
</code></pre></li>
</ul>
<p>遗憾的是,如果您的构造需要语句,python将不允许您这样做;只有当您有一个文本时,您才能避免这种情况。另一种解决方案是:</p>
<ul>
<li><p>您可以创建一个为您执行此操作的函数:</p>
^{2美元</li>
</ul>
<p>很遗憾,如果你不需要这样的解释的话。您可以创建一个变量<code>x={'red':...}</code>或其他东西,但这会破坏整个目的。第三种方法是<code>locals()</code>,但这仍然要求您引用名称。在</p>
<p>总之,如果您需要重要的for循环和函数以及IF语句,那么在python中,您所要做的是不可能的,除非您改变了构造<code>fruit=...</code>字典的整个方法。多行lambda、字典理解(<code>dict((k,v) for k,v in ...)</code>)、内联<code>IFTRUE if EXPR else IFFALSE</code>等的组合是可能的。这种风格的危险在于它很快变得难以阅读。在</p>
<p>如果你能把你的字典表达成一个字面字典,或者一个字典理解,或者一个你已经写过的函数的输出,这是可能的。事实上,这是相当容易的(见其他答案)。不幸的是,最初的问题并没有说明您是如何构建这些词典的。在</p>
<p>假设这些答案没有回答你的问题(也就是说,你正在以一种非常复杂的方式构建这些问题),你可以编写“元”代码:为你编写字典的代码,并滥用反射。然而,python中最好的解决方案是使用迭代来创建字典。例如:</p>
<pre><code>foods = {
"Fruit": {...},
"Meats": makeMeats(),
}
for name,data in ...:
foods[name] = someProcessing(data)
foods.update(dataFromSomeFile) #almost same as last two lines
</code></pre>