【发布时间】:2019-07-10 17:47:39
【问题描述】:
给定两个单独的示例字典:
fruit_type = {'apple': 'stonefruit', 'peach': 'stonefruit', 'pear': 'stonefruit','orange': 'citrus', 'lemon': 'citrus', 'tangerine': 'citrus'}
similar_fruit = {'apple': ['peach', 'pear'], 'peach': ['apple', 'pear'], 'pear': ['apple', 'peach'], 'orange': ['lemon', 'tangerine'], 'lemon': ['orange', 'tangerine'], 'tangerine': ['orange', 'lemon']}
根据另一个字典 fruit_type 中的值比较每个键与 similar_fruit 字典中的值的最有效方法是什么?
我在下面有一个看起来很幼稚的工作实现:
same_type = False
for fruit in similiar_fruit:
for comparison in similiar_fruit[fruit]:
if fruit_type[fruit] == fruit_type[comparison]:
same_type = True
请注意,始终只有 2 种水果(核果、柑橘),并且第一个字典中的键与第二个字典中的键在相同的键(苹果、 peach, pear, orange, lemon, tangerine),不一定是键的顺序。
提前谢谢你。
【问题讨论】:
-
您的示例简洁明了。但是你在寻找什么结果?显然,在运行上面的代码之后,你最终会得到“same_type == True”,这不是很有趣。您是否希望获得某些特定的数据结构?或者您只是在寻找内部 if 子句失败的情况?这似乎是真正有趣的结果,从您的示例数据来看,您希望所有测试都能成功,对吧?如果是这样,在您的数据中包含一个失败案例会更好(我没有错过它,是吗?)
-
因此,目标是返回布尔值以检查
similar_fruit键是否与基于fruit_type的值匹配,以确保例如水果束可以存放在一起的东西。所以是的,我正在检查内部子句是否失败,其中组合将不是一个可行的捆绑包。话虽如此,是的,对于这种情况,数据中的失败案例将是首选。 -
哈!认为这样。因此,如果您将上述代码放入一个函数中,如果比较失败则返回 False,并在底部返回 True,那么您将拥有一个可以为您提供所需结果的函数,对吗?那么这是一个更有效算法的问题,是吗?
-
是的,完全正确
-
注意始终只有两种水果可能会有所帮助,并且第一个字典中的键与第二个字典中的键在相同的键方面对齐,而不是必须是键的顺序。
标签: python dictionary