Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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 从dict随机弹出,提供值,而不是键_Python_Dictionary_Random_Key - Fatal编程技术网

Python 从dict随机弹出,提供值,而不是键

Python 从dict随机弹出,提供值,而不是键,python,dictionary,random,key,Python,Dictionary,Random,Key,上面的项变量从我的word\u bank字典返回值而不是键。我打印了我的密钥列表以尝试调试问题,但不存在任何值,这使我认为问题存在于pop方法或random.choice方法。我查看了这两个文档,没有发现任何可以指出问题的地方 我认为这与random.choices将索引返回到键,然后pop方法将相应的值作为项返回到该键有关。但是,当我反转角色并使用values()代替keys()时,我得到一个键错误,无法找到解决问题的有效方法。word\u bank.keys()显然会返回键(如果有)。wor

上面的
变量从我的
word\u bank
字典返回值而不是键。我打印了我的密钥列表以尝试调试问题,但不存在任何值,这使我认为问题存在于
pop
方法或
random.choice
方法。我查看了这两个文档,没有发现任何可以指出问题的地方

我认为这与
random.choices
将索引返回到键,然后
pop
方法将相应的值作为项返回到该键有关。但是,当我反转角色并使用
values()
代替
keys()
时,我得到一个键错误,无法找到解决问题的有效方法。

word\u bank.keys()显然会返回键(如果有)。word_bank.pop将返回给定键的值。因此,项将包含来自word_bank的值。但是,当我反转角色并使用values()代替keys()时,会出现一个键错误,这是因为您试图使用值搜索键。字典只能直接按键索引,不能按值索引。 选中此项:

item = word_bank.pop(random.choice(list(word_bank.keys()))) 
print(list(word_bank.keys()))
print("The Word is: ", item)
print("=" * 25)
a = input("Do You Know It? (y/n):\t")
answer = word_bank[item]
word_bank.keys()显然会返回键(如果有的话)。word_bank.pop将返回给定键的值。因此,项将包含来自word_bank的值。但是,当我反转角色并使用values()代替keys()时,会出现一个键错误,这是因为您试图使用值搜索键。字典只能直接按键索引,不能按值索引。 选中此项:

item = word_bank.pop(random.choice(list(word_bank.keys()))) 
print(list(word_bank.keys()))
print("The Word is: ", item)
print("=" * 25)
a = input("Do You Know It? (y/n):\t")
answer = word_bank[item]
我提出了这个解决方案,但它似乎不是很有效,有谁能提供一种方法来破坏性地迭代我的字典,使用更少的行或提供更多的可读性?我的直觉是pop,但这只适用于键,而不适用于值,我需要删除并将键返回给用户,然后向他们显示值。上面的例子是可行的,但看起来很庞大


我提出了这个解决方案,但它似乎不是很有效,有谁能提供一种方法来破坏性地迭代我的字典,使用更少的行或提供更多的可读性?我的直觉是pop,但这只适用于键,而不适用于值,我需要删除并将键返回给用户,然后向他们显示值。上面的示例很有效,但看起来很笨重。

随机选择一个键,然后
pop()
答案:

word_bank = {'hello':'goodbye','yes':'no'}    

            item = random.choice(list(word_bank.items()))
              key = item[0]
              value = item[1]
              print("The Word is: ", key)
              print("=" * 25)
              a = input("Do You Know It? (y/n):\t")
              answer = value
            if a.lower() == "y":
                  print()
                  print("Answer:\t", answer)
                  score += 1
                  del word_bank[key]           #remove from dict 
                  print()
            elif a.lower() == "n":
                  print()
                  print("Answer:\t", answer)
                  del word_bank[key]            #remove from dict
                  print()
上面的代码在每个阶段都会对字典进行变异。如果你想再次进行测验怎么办?我不喜欢无缘无故地破坏信息。这是一个完整测试的非破坏性版本,它洗牌键,因此在不同的运行中给出不同的顺序(注意,我省去了变量
answer
,因为我只需要一行代码中的值):


随机选择一个键,然后选择答案:

word_bank = {'hello':'goodbye','yes':'no'}    

            item = random.choice(list(word_bank.items()))
              key = item[0]
              value = item[1]
              print("The Word is: ", key)
              print("=" * 25)
              a = input("Do You Know It? (y/n):\t")
              answer = value
            if a.lower() == "y":
                  print()
                  print("Answer:\t", answer)
                  score += 1
                  del word_bank[key]           #remove from dict 
                  print()
            elif a.lower() == "n":
                  print()
                  print("Answer:\t", answer)
                  del word_bank[key]            #remove from dict
                  print()
上面的代码在每个阶段都会对字典进行变异。如果你想再次进行测验怎么办?我不喜欢无缘无故地破坏信息。这是一个完整测试的非破坏性版本,它洗牌键,因此在不同的运行中给出不同的顺序(注意,我省去了变量
answer
,因为我只需要一行代码中的值):


…不存在值,您知道dict.pop的作用吗?您到底想做什么?是的,如果您向
.pop
方法传递一个键,它将弹出相应的值……不存在值,您知道
dict.pop
的作用吗?您到底想做什么?是的,如果你向
.pop
方法传递一个键,它会弹出相应的值…因此,如果某人声称知道答案,即使没有检查答案,你也会给他一个分数?该程序仅供我使用,我正在浏览另一种语言的单词词典,键为外语,值为英语定义。它只供我使用,所以现在检查响应真的不是问题。为什么是破坏性的?你只回答了一部分,其余的做了些什么吗?没有特别的原因,除了,我只是不想在我的随机选择中收到重复的单词。我想我可以把它做成一个循环,这样会更好吗?那么,如果有人声称知道答案,即使没有检查答案,你也会给他们一个分数?这个程序仅供我使用,我正在运行一个不同语言的单词词典,键是外语,值是英语定义。它只供我使用,所以现在检查响应真的不是问题。为什么是破坏性的?你只回答了一部分,其余的做了些什么吗?没有特别的原因,除了,我只是不想在我的随机选择中收到重复的单词。我想我可以把它做成一个循环,这样会更好吗?
import random

word_bank = {'hello':'goodbye','yes':'no'}
score = 0
questions = list(word_bank.keys())
random.shuffle(questions)
for item in questions:
    print("The Word is: ", item)
    print("=" * 25)
    a = input("Do You Know It? (y/n):\t")
    if a.lower() == "y": score += 1
    print()
    print("Answer:\t", word_bank[item])

print("Final score =",score)