给出两个单独的示例词典:
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']}
根据另一个字典similar_fruit
中的键,将每个键与fruit_type
字典中的值进行比较的最有效方法是什么?
我在下面有一个看起来很幼稚的工作实现:
same_type = False
for fruit in similiar_fruit:
for comparison in similiar_fruit[fruit]:
if fruit_type[fruit] == fruit_type[comparison]:
same_type = True
请注意,在任何时候都只有两种类型的水果(核果,柑桔),并且第一本词典中的键与第二本词典中的键在同一键方面(苹果,桃,梨,橙,柠檬,橘子),不一定是键的顺序。
谢谢。
答案 0 :(得分:0)
我认为没有其他方法可以简化!但是,我将更改以same_type = True
开头,并进行如下比较:
if fruit_type[fruit] != fruit_type[comparison]:
same_type = False
break
那样,一旦比较不正确,它将使内部子句失败以防止比较覆盖,并停止循环。
此外,如果您只是想为每个水果创建一个字典,并列出它们与之相似的列表,而不是从两个字典开始比较,那么我在此处编写了代码来实现:
fruit_type = {'apple': 'stonefruit', 'peach': 'stonefruit', 'pear': 'stonefruit','orange': 'citrus', 'lemon': 'citrus', 'tangerine': 'citrus'}
similar_fruits = {}
for fruit in fruit_type:
similar = []
for comp in fruit_type:
if fruit != comp:
if fruit_type[fruit] == fruit_type[comp]:
similar.append(comp)
similar_fruits[fruit] = similar
print(similar_fruits)
similar_fruits
将成为所有水果的自动词典以及它们类似于的每个水果的列表。
{'apple': ['peach', 'pear'], 'peach': ['apple', 'pear'], 'pear': ['apple', 'peach'], 'orange': ['lemon', 'tangerine'], 'lemon': ['orange', 'tangerine'], 'tangerine': ['orange', 'lemon']}
希望这会有所帮助! -内特
答案 1 :(得分:0)
然后将每个水果与每个相似的水果配对:
similar_pairs = [(f,sim) for f,sims in similar_fruit.items() for sim in sims]
现在请问这对成员是否都属于同一类型:
for a,b in similar_pairs:
if fruit_type[a] == fruit_type[b]:
print(f"{a} and {b} are similar and the same kind")