Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表与字典进行比较并根据结果打印消息_Python - Fatal编程技术网

Python 将列表与字典进行比较并根据结果打印消息

Python 将列表与字典进行比较并根据结果打印消息,python,Python,我希望我能正确地解释这一点。我有一本字典,里面有一系列的名字。我还有一张名单,上面还有一张名单。我想做的是将列表中的姓名输入字典,如果列表中提到了姓名,但字典中没有提到姓名,我希望它打印一条消息,告诉此人进行调查。以下是我到目前为止的情况: favorite_languages = {'Jen': 'python', 'Sarah': 'c', 'Edward': 'Ruby', 'Phil': 'python'} poll_takers = ['Jen', 'Greg', 'Sarah', '

我希望我能正确地解释这一点。我有一本字典,里面有一系列的名字。我还有一张名单,上面还有一张名单。我想做的是将列表中的姓名输入字典,如果列表中提到了姓名,但字典中没有提到姓名,我希望它打印一条消息,告诉此人进行调查。以下是我到目前为止的情况:

favorite_languages = {'Jen': 'python', 'Sarah': 'c', 'Edward': 'Ruby', 'Phil': 'python'}
poll_takers = ['Jen', 'Greg', 'Sarah', 'Allan', 'Bob']


for name, language in favorite_languages.items():
    print(name.title() + "'s favorite language is " + language.title() + ".")

    if name in favorite_languages:
        print('Thank you for taking the poll!')
    if name in poll_takers and not favorite_languages:
        print('Please take our poll!')
当我运行此程序时,它会打印“最喜爱的语言”列表中每个人的姓名,并在每个人之后打印“谢谢”,但它不会从
投票人
列表中找到缺少的姓名,并打印正确的消息

我知道这很简单,但我试过一些方法,但都没有成功。有人知道我遗漏了什么吗?

问题是:

for name, language in favorite_languages.items():
这只会对结果进行迭代,即已进行投票的姓名。因此,您需要以某种方式迭代那些还没有结果的
投票人

这里有一个提示:

>>> favorite_languages.keys() | poll_takers
{'Allan', 'Bob', 'Edward', 'Greg', 'Jen', 'Phil', 'Sarah'}

问题是,您只需迭代最喜爱的_语言中的项,因此第二条if语句的计算结果永远不会为True

相反,您可以使用set()只从favorite_语言中的键和poll_takers中的值中获取唯一值:

最喜欢的语言={'Jen':'python','Sarah':'c','Edward':'Ruby','Phil':'python'} 投票人=['Jen'、'Greg'、'Sarah'、'Allan'、'Bob']

for name in set(favorite_languages + poll_takers):
    try:
       language = favorite_languages[name]
    except KeyError:
       # This means the name isn't in your favorite_languages dictionary
       print('Please take our poll!')
       return

    print(name.title() + "'s favorite language is " + language.title() + ".")

    print('Thank you for taking the poll!')

我可能会从投票人的角度来看待这一点:

favorite_languages = {'Jen': 'python', 'Sarah': 'c', 'Edward': 'Ruby', 'Phil': 'python'}
poll_takers = ['Jen', 'Greg', 'Sarah', 'Allan', 'Bob']

for name in poll_takers:
    if name in favorite_languages.keys():
        print(name + "'s favorite language is " + favorite_languages[name] + ".")
        print("Thank you for taking the poll!")
    else:
        print(name + " does not have a favorite language.")
        print("Please take our poll!")

@wim为您提供了一个很好的提示,因此正如他所告诉您的,只需使用集合,其中您有
投票人的姓名
和您的
最喜爱的语言的键
。我想我可以提供一个答案,但这似乎是一个任务,所以我会让你弄清楚。你的回答非常准确。我喜欢你没有解决他的家庭作业,但你的暗示足以让他自己做。