Skip to main content
 首页 » 编程设计

python之我怎样才能对字典中的数字列表进行平方

2025年05月04日36jackei

我想对 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 .