我有一个问题 我有一本叫做(plane)的字典,可以在其中调用诸如“名称”或“速度”之类的变量。
这些值例如给我这样的输出:
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
答案 0 :(得分:3)
我的问题是,我怎样才能如下估算值?
您必须显式地编写代码。
'name'= DD8EFC(始终删除前三行)
获取字符串,然后切成薄片:
name = plane.get('name')[3:]
print(f"'name' = {name}'")
但是,您使用的是get
而不是[]
的事实意味着您期望处理name
中不存在plane
的可能性
如果这是不可能的,您应该只使用[]
:
name = plane['name'][3:]
如果是,则需要提供一个可以切片的默认值:
name = plane.get('name', '')[3:]
“速度” =136。(近似整数)
您似乎想四舍五入为小数位数,但将其保留为float
吗?拨打带有round
位数字的0
。同样,您不需要get
,或者您需要其他默认值:
speed = round(plane['speed'], 0)
…或:
speed = round(plane.get('speed', 0.0), 0)
关于打印它:Python不喜欢在.
之后打印float
而不打印任何小数值。您可以使用format
字段,但是手动将.
放入可能会更简单:
print(f"'speed': {speed}.")
答案 1 :(得分:1)
>>> plane.get('name')[3:]
'DD8EFC'
>>> round(plane.get('speed'))
136
答案 2 :(得分:0)
您可能可以继承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]
免责声明: 这比任何东西都更能证明概念;我不推荐这种方法。该“开关”很丑陋,一旦约束列表增加一点,它可能会失控。