字典变量的逼近和修改

问题描述 投票:-1回答:3

我有一个问题,我有一个叫做(平面)的字典,我可以调用诸如'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

python approximation
3个回答
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.(近似整体)

看起来你想要舍入到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}.")

1
投票
>>> plane.get('name')[3:]
'DD8EFC'
>>> round(plane.get('speed'))
136

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'])

output:

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]

免责声明:这更像是一种概念证明;我不推荐这种方法; “切换”很难看,一旦约束列表增长,就会失控。

© www.soinside.com 2019 - 2024. All rights reserved.