我收到此错误,我想我花了5个小时。请有人帮忙。 我最终想要从中获得价值。 是什么导致了许多价值观?这是我的字符串值还是字典本身的设置。
import ast
# -*- coding: utf-8 -*-
class MyMetric:
def __init__(self, name):
self.name = name
self.metric_system = {
"yotta": ("Y", str(10^24) ),
"zetta": ("Z", str(10^21)),
"exa": ("E", str(10^18)),
"peta": ("P", str(10^15)),
"tera": ("T", str(10^12)),
"giga": ("G", str(10^9)),
"mega": ("M", str(10^6)),
"kilo": ("k", str(10^3)),
"hecto": ("h", str(10^2)),
"deka": ("da", str(10^1)),
"deci": ("d", str(10^-1)),
"centi": ("c", str(10^-2)),
"milli": ("m", str(10^-3)),
"micro": ("μ", str(10^-6)),
"nano": ("n", str(10^-9)),
"pico": ("p", str(10^-12)),
"femto": ("f", str(10^-15)),
"atto": ("a", str(10^-18)),
"zepto": ("z", str(10^-21)),
"yocto": ("y", str(10^-24))
}
def __str__(self):
for key,val in self.metric_system:
self.metric_name = key
self.metric_symbol = val[0]
self.metric_value = val[1]
if self.name == self.metric_name:
print ("it is there")
me = MyMetric("milli")
print(me)
答案 0 :(得分:1)
通过字典循环只能为键提供。如果您想要密钥和值,请使用dict.items()
method:
for key, val in self.metric_system.items():
iter(d)
在字典的键上返回一个迭代器。这是iter(d.keys())
的快捷方式。
for
循环在内部循环的项目上使用iter()
。
请注意,__str__
方法应该返回字符串,而不是打印它。
但是,当已经拥有密钥时,迭代字典中的所有值几乎没有意义。你可以这样做:
def __str__(self):
if self.name in self.metric_system:
return "it is here"
return "it is not here"
或使用字典查找来获取值:
def __str__(self):
try:
symbol, magnitude = self.metric_system[self.name]
except KeyError:
return 'Unknown metric {}'.format(self.name)
return 'Metric {} ({}, {})'.format(self.name, symbol, magnitude)
演示:
>>> print(MyMetric("milli"))
Metric milli (m, -9)
>>> print(MyMetric("foobar"))
Unknown metric foobar
答案 1 :(得分:0)
你的循环应该是
for key,val in self.metric_system.items():
这会迭代成对的(key, value)