遍历字典值?
Iterate through dictionary values?
大家好,我正在尝试在 Python 中编写一个程序,作为问答游戏。我在程序的开头制作了一本字典,其中包含用户将被测验的值。它的设置如下:
PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}
所以我定义了一个函数,它使用 for
循环遍历字典键并请求用户输入,并将用户输入与键匹配的值进行比较。
for key in PIX0:
NUM = input("What is the Resolution of %s?" % key)
if NUM == PIX0[key]:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: %s." % PIX0[key] )
这工作正常,输出如下所示:
What is the Resolution of Full HD? 1920x1080
Nice Job!
What is the Resolution of VGA? 640x480
Nice Job!
所以我想做的是有一个单独的功能,以另一种方式提出问题,为用户提供分辨率编号并让用户输入显示标准的名称。所以我想做一个 for 循环,但我真的不知道如何(或者如果你可以)遍历字典中的值并要求用户输入键。
我想要这样的输出:
Which standard has a resolution of 1920x1080? Full HD
Nice Job!
What standard has a resolution of 640x480? VGA
Nice Job!
我试过 for value in PIX0.values()
,这让我可以遍历字典值,但我不知道如何使用它 "check" 用户根据字典键回答.如果有人能提供帮助,我们将不胜感激。
编辑: 抱歉,我正在使用 Python3.
您可以搜索相应的键,也可以 "invert" 字典,但考虑到您的使用方式,最好只是迭代 key/value 对 首先,你可以用 items()
来做。然后你直接在变量中,根本不需要查找:
for key, value in PIX0.items():
NUM = input("What is the Resolution of %s?" % key)
if NUM == value:
你当然可以同时使用这两种方式。
或者如果您实际上不需要字典来做其他事情,您可以放弃字典并使用普通的对列表。
你可以只查找与键对应的值,然后检查输入是否等于键。
for key in PIX0:
NUM = input("Which standard has a resolution of %s " % PIX0[key])
if NUM == key:
此外,您必须更改最后一行以适应,因此如果您得到错误的答案,它将打印键而不是值。
print("I'm sorry but thats wrong. The correct answer was: %s." % key )
此外,我建议使用 str.format
代替 %
语法进行字符串格式化。
您的完整代码应如下所示(添加字符串格式后)
PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}
for key in PIX0:
NUM = input("Which standard has a resolution of {}".format(PIX0[key]))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but that's wrong. The correct answer was: {}.".format(key))
如果你所有的值都是唯一的,你可以做一个反向字典:
PIXO_reverse = {v: k for k, v in PIX0.items()}
结果:
>>> PIXO_reverse
{'320x240': 'QVGA', '640x480': 'VGA', '800x600': 'SVGA'}
现在您可以使用与以前相同的逻辑。
取决于您的版本:
Python 2.x:
for key, val in PIX0.iteritems():
NUM = input("Which standard has a resolution of {!r}?".format(val))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: {!r}.".format(key))
Python 3.x:
for key, val in PIX0.items():
NUM = input("Which standard has a resolution of {!r}?".format(val))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: {!r}.".format(key))
您还应该养成使用来自 PEP 3101 的新字符串格式语法({}
而不是 %
运算符)的习惯:
创建相反的字典:
PIX1 = {}
for key in PIX0.keys():
PIX1[PIX0.get(key)] = key
然后 运行 在此词典中使用相同的代码(使用 PIX1
而不是 PIX0
)。
顺便说一句,我不确定 Python 3,但是在 Python 2 中你需要使用 raw_input
而不是 input
。
大家好,我正在尝试在 Python 中编写一个程序,作为问答游戏。我在程序的开头制作了一本字典,其中包含用户将被测验的值。它的设置如下:
PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}
所以我定义了一个函数,它使用 for
循环遍历字典键并请求用户输入,并将用户输入与键匹配的值进行比较。
for key in PIX0:
NUM = input("What is the Resolution of %s?" % key)
if NUM == PIX0[key]:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: %s." % PIX0[key] )
这工作正常,输出如下所示:
What is the Resolution of Full HD? 1920x1080
Nice Job!
What is the Resolution of VGA? 640x480
Nice Job!
所以我想做的是有一个单独的功能,以另一种方式提出问题,为用户提供分辨率编号并让用户输入显示标准的名称。所以我想做一个 for 循环,但我真的不知道如何(或者如果你可以)遍历字典中的值并要求用户输入键。
我想要这样的输出:
Which standard has a resolution of 1920x1080? Full HD
Nice Job!
What standard has a resolution of 640x480? VGA
Nice Job!
我试过 for value in PIX0.values()
,这让我可以遍历字典值,但我不知道如何使用它 "check" 用户根据字典键回答.如果有人能提供帮助,我们将不胜感激。
编辑: 抱歉,我正在使用 Python3.
您可以搜索相应的键,也可以 "invert" 字典,但考虑到您的使用方式,最好只是迭代 key/value 对 首先,你可以用 items()
来做。然后你直接在变量中,根本不需要查找:
for key, value in PIX0.items():
NUM = input("What is the Resolution of %s?" % key)
if NUM == value:
你当然可以同时使用这两种方式。
或者如果您实际上不需要字典来做其他事情,您可以放弃字典并使用普通的对列表。
你可以只查找与键对应的值,然后检查输入是否等于键。
for key in PIX0:
NUM = input("Which standard has a resolution of %s " % PIX0[key])
if NUM == key:
此外,您必须更改最后一行以适应,因此如果您得到错误的答案,它将打印键而不是值。
print("I'm sorry but thats wrong. The correct answer was: %s." % key )
此外,我建议使用 str.format
代替 %
语法进行字符串格式化。
您的完整代码应如下所示(添加字符串格式后)
PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}
for key in PIX0:
NUM = input("Which standard has a resolution of {}".format(PIX0[key]))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but that's wrong. The correct answer was: {}.".format(key))
如果你所有的值都是唯一的,你可以做一个反向字典:
PIXO_reverse = {v: k for k, v in PIX0.items()}
结果:
>>> PIXO_reverse
{'320x240': 'QVGA', '640x480': 'VGA', '800x600': 'SVGA'}
现在您可以使用与以前相同的逻辑。
取决于您的版本:
Python 2.x:
for key, val in PIX0.iteritems():
NUM = input("Which standard has a resolution of {!r}?".format(val))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: {!r}.".format(key))
Python 3.x:
for key, val in PIX0.items():
NUM = input("Which standard has a resolution of {!r}?".format(val))
if NUM == key:
print ("Nice Job!")
count = count + 1
else:
print("I'm sorry but thats wrong. The correct answer was: {!r}.".format(key))
您还应该养成使用来自 PEP 3101 的新字符串格式语法({}
而不是 %
运算符)的习惯:
创建相反的字典:
PIX1 = {}
for key in PIX0.keys():
PIX1[PIX0.get(key)] = key
然后 运行 在此词典中使用相同的代码(使用 PIX1
而不是 PIX0
)。
顺便说一句,我不确定 Python 3,但是在 Python 2 中你需要使用 raw_input
而不是 input
。