我想对 Python 字典中的所有值求平方,但我用了错误的方法。下面是我的尝试,显然失败了并产生了
TypeError: unsupported operand type(s)
程序是
tides = {'G3': [3, 8, 9, 7], 'G2': [2, 7], 'G1': [1, 6, 7]}
for v in tides.values():
print v**2
期望的输出是
{'G3': [9, 64, 81, 49], 'G2': [4, 49], 'G1': [1, 36, 49]}
请您参考如下方法:
dict.values
给你一个项目列表,该列表的每个元素都是一个列表。因此,当您说 v ** 2
时,您实际上是在尝试对列表求平方,这在 Python 中是不可能的。这就是它失败的原因。
相反,只需像这样用字典理解重新创建字典
>>> tides = {'G3': [3, 8, 9, 7], 'G2': [2, 7], 'G1': [1, 6, 7]}
>>> {tide: [value ** 2 for value in tides[tide]] for tide in tides}
{'G3': [9, 64, 81, 49], 'G2': [4, 49], 'G1': [1, 36, 49]}
或者您可以使用 dict.iteritems
像这样
>>> {tide: [value ** 2 for value in values] for tide, values in tides.iteritems()}
{'G3': [9, 64, 81, 49], 'G2': [4, 49], 'G1': [1, 36, 49]}
注意:在上面显示的两个示例中,我都避免使用 dict.values
,因为这会创建一个包含字典中所有值的临时列表.我们不希望这样。
在第一个示例中,我们遍历字典中的键并获取与键对应的值并将其中的每个值平方。
在第二个例子中,我们一次从字典中取出一对键和值。因此,我们不创建临时列表。
上面显示的 {...}
中的代码称为 dictionary comprehension在其中,[...]
中的任何内容都称为 list comprehension .