好的,我有一本叫食物的字典。食物有两个元素,它们都是字典本身,蔬菜和奶制品。蔬菜有两种元素根:萝卜,茎:芦笋。乳品厂有奶酪:切达干酪和酸奶:草莓。我还有一本新字典里的水果,红色:樱桃,黄色:香蕉。在
food['veg']['root'] == 'Turnip'
food['dairy']['cheese'] == 'Cheddar'
等等
^{pr2}$现在,我想把“水果”字典全部添加到“食物”字典中,这样我就可以:
food['fruit']['red'] == 'Cherry'
我知道我可以这样做:
food['fruit'] = fruit
但这看起来很笨拙。我想做点什么
food.Append(fruit)
但那不能满足我的需要。在
(编辑后删除了变量名的首字母大写,因为这似乎会分散注意力。)
Food['Fruit'] = Fruit
是正确和正确的方式(除了大写的名称)。在正如@kindall明智地在注释中指出的,可能有多个名称引用同一个字典,这就是为什么不能构建一个函数来将对象映射到它的名称,并将其作为
food
dict中的新键你用方括号有什么原因吗?因为您可以用嵌套的文字字典来表示此数据结构:
我知道你想做什么。您试图在python中避免DRY。不幸的是,python和许多其他语言在这方面做得很差。在
不过,主要的问题是您将变量的名称与程序中的值混合在一起。这是许多编程语言中常见的错误。
如果您真的想这样做,那么绑定到
fruit=...
变量的东西需要知道它的名称。在"Fruit"
”有两种解决方案:
您可以避免创建
fruit=...
变量,而是直接将其移植到"Fruit"
名称中。因此,您只需输入“Fruit”一次,但是我们没有像您想要的那样键入somedict["Fruit"]
,而是避免了输入变量名。这是通过匿名编程实现的:遗憾的是,如果您的构造需要语句,python将不允许您这样做;只有当您有一个文本时,您才能避免这种情况。另一种解决方案是:
您可以创建一个为您执行此操作的函数:
^{2美元很遗憾,如果你不需要这样的解释的话。您可以创建一个变量
x={'red':...}
或其他东西,但这会破坏整个目的。第三种方法是locals()
,但这仍然要求您引用名称。在总之,如果您需要重要的for循环和函数以及IF语句,那么在python中,您所要做的是不可能的,除非您改变了构造
fruit=...
字典的整个方法。多行lambda、字典理解(dict((k,v) for k,v in ...)
)、内联IFTRUE if EXPR else IFFALSE
等的组合是可能的。这种风格的危险在于它很快变得难以阅读。在如果你能把你的字典表达成一个字面字典,或者一个字典理解,或者一个你已经写过的函数的输出,这是可能的。事实上,这是相当容易的(见其他答案)。不幸的是,最初的问题并没有说明您是如何构建这些词典的。在
假设这些答案没有回答你的问题(也就是说,你正在以一种非常复杂的方式构建这些问题),你可以编写“元”代码:为你编写字典的代码,并滥用反射。然而,python中最好的解决方案是使用迭代来创建字典。例如:
相关问题 更多 >
编程相关推荐