首页 > 解决方案 > 给定一个以字符串列表为值的字典,您将如何检索列表中包含对所有其他列表唯一的字符串的所有键?

问题描述

例如,如果字典是这样的:

myDict = {"egg sandwich":["bread", "lettuce", "mayo","egg"], 
          "sad sandwich":["bread","lettuce","mayo"],
          "ham sandwich":["bread","lettuce","mayo","ham"],
          "healthy sandwich":["lettuce"],
          "breakfast sandwich":["bread","egg","mayo"]}

该函数应返回“火腿三明治”,因为它是唯一包含与所有其他列表进行比较的成分(火腿)的三明治。

标签: pythonlistdictionaryoptimization

解决方案


这似乎有效:

def get_unique_item(d):
    all_ingredients = [y for x in d.values() for y in x]

    output = []
    for name, ingredients in d.items():
        for ingredient in ingredients:
            if all_ingredients.count(ingredient) == 1:
                output.append(name)
                break

    return output

myDict = {"egg sandwich":["bread", "lettuce", "mayo","egg"], 
          "sad sandwich":["bread","lettuce","mayo"],
          "ham sandwich":["bread","lettuce","mayo","ham"],
          "healthy sandwich":["lettuce"],
          "breakfast sandwich":["bread","egg","mayo"]}


print(get_unique_item(myDict))

输出:

['ham sandwich']

基本上,我们创建所有成分的所有出现的列表,并且对于每个三明治,我们检查是否有任何成分只出现一次。


如果你真的想要,你可以把它变成一个单行列表理解:

[name for name, ingredients in d.items() if any([y for x in d.values() for y in set(x)].count(i) == 1 for i in ingredients)]

推荐阅读