我有一个问题,我有一个叫做(平面)的字典,我可以调用诸如'name'或'speed'之类的变量。
这些值为我提供了这种输出,例如:
print(plane.get('name'))
print(plane.get('altitude'))
输出:
'name'= FLRDD8EFC
'speed'= 136.054323
我的问题是,我如何估算值如下?
'name'= DD8EFC (Always deleting the first three lines)
'speed'= 136. (Approximate whole)
非常感谢你的帮助! G
我的问题是,我如何估算值如下?
您必须明确地编写代码。
'name'= DD8EFC(始终删除前三行)
获取字符串,然后将其切片:
name = plane.get('name')[3:]
print(f"'name' = {name}'")
然而,你使用get
而不是[]
的事实意味着你期望处理name
中不存在plane
的可能性。
如果这不可能,你应该只使用[]
:
name = plane['name'][3:]
如果是,您需要提供可以切片的默认值:
name = plane.get('name', '')[3:]
'速度'= 136.(近似整体)
看起来你想要舍入到0的小数位数,但保持一个float
?用round
数字调用0
。再次,要么你不需要get
,要么你需要一个不同的默认值:
speed = round(plane['speed'], 0)
… 要么:
speed = round(plane.get('speed', 0.0), 0)
至于打印它:Python不喜欢在.
之后打印float
而不打印任何小数值。您可以使用format
字段进行操作,但是手动放置.
可能更简单:
print(f"'speed': {speed}.")
>>> plane.get('name')[3:]
'DD8EFC'
>>> round(plane.get('speed'))
136
您可以将collections.UserDict
(或者可能是@abamert建议的dict
)子类化,并在特殊方法__getitem__
中编写某种切换/过滤器/格式化程序:
这样的事情,也许:
from collections import UserDict
class MyDict(UserDict):
def __getitem__(self, key):
if key == 'name':
return self.data[key][3:]
if key == 'speed':
return round(self.data[key], 3)
return self.data[key]
if __name__ == '__main__':
mydata = MyDict({'name': 'ABCDEF', 'speed': 12.123456})
print(mydata['name'], mydata['speed'])
DEF 12.123
或继承dict
:
class MyDict(dict):
def __getitem__(self, key):
if key == 'name':
return self.get(key)[3:]
if key == 'speed':
return round(self.get(key), 3)
return self[key]
免责声明:这更像是一种概念证明;我不推荐这种方法; “切换”很难看,一旦约束列表增长,就会失控。