Python:根据单独字典中设置的类型,将键与字典中每个键对值的值进行比较

时间:2019-02-16 23:34:38

标签: python dictionary

给出两个单独的示例词典:

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

请注意,在任何时候都只有两种类型的水果(核果,柑桔),并且第一本词典中的键与第二本词典中的键在同一键方面(苹果,桃,梨,橙,柠檬,橘子),不一定是键的顺序。

谢谢。

2 个答案:

答案 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")