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

2024-04-20 09:04:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

注意始终只有两种水果(核果、柑橘)可能会有帮助,第一本词典中的键与第二本词典中的键在相同的键(苹果、桃子、梨、橘子、柠檬、橘子)上排列,不一定是键的顺序。你知道吗

先谢谢你。你知道吗


Tags: applefor字典type词典lemonsamesimilar
2条回答

然后将每个水果与每个相似的水果配对:

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

我不相信有任何其他方法可以简化这一点!但是,我将更改起始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']}

希望这有帮助! -奈特

相关问题 更多 >