我希望将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]}
答案 0 :(得分:3)
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。
答案 1 :(得分:1)
当你tides.values()
得到的是:
[[3, 8, 9, 7], [2, 7], [1, 6, 7]]
因此当你这样做时
for v in tides.values():
print v ** 2
您正在尝试
[3, 8, 9, 7] ** 2 # and [2, 7] ** 2 and [1, 6, 7] ** 2
这显然是胡言乱语。相反,你应该尝试:
for key, value in tides.items():
tides[key] = [num**2 for num in value]
答案 2 :(得分:1)
您可以使用词典理解:
tides = {'G3': [3, 8, 9, 7], 'G2': [2, 7], 'G1': [1, 6, 7]}
tides = {k: map(lambda num: num ** 2, v) for k, v in tides.items()}
结果:
{'G3': [9, 64, 81, 49], 'G2': [4, 49], 'G1': [1, 36, 49]}
map(lambda num: num ** 2, v)
平方v
的每个值tides
的值。
如果您只想更换,可以执行以下操作:
for v in tides.values():
for i in range(len(v)):
v[i] **= 2
答案 3 :(得分:0)
tides.values()返回列表列表。您试图对列表进行平方而不是列表中的值。您可以添加第二个循环来遍历列表。
for t in tides.values(): for x in v: 打印x ** 2
答案 4 :(得分:0)
使用词典理解:
print {k: map(lambda x: x**2, [x for x in v]) for k, v in tides.items()}