首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于分类列表中对象的速度的字典

用于分类列表中对象的速度的字典
EN

Stack Overflow用户
提问于 2022-04-28 08:59:59
回答 2查看 40关注 0票数 -1

我很难用字典来分类物体的速度。

输入:

Object_dict={“空客380”:{“国家”:“法国、德国、西班牙、英国”、“最高速度(马赫)”:0.89}、“协和”:{“国家”:“法国、英国”、“最高速度(马赫)”:2.01}、“波音X-43”:{“国家”:“美国”、“最高速度(马赫)”:9.6}}

输出:

Objects_by_Mach={“亚音速”:“空客380",”跨音速“:[],”超音速“:”协和“,”高超音速“:”波音X-43"}

这是我的密码:

代码语言:javascript
复制
Mach_scale = {"Subsonic": 0,
                   "Transonic": 1,
                   "Supersonic":5,
                   "Hypersonic":5 ,
                   }

#Subsonic object has speed of Mach<0
#Transsonic object has speed of Mach=1
#Supersonic object has speed of 1<Mach<5
#Hypersonic object has speed of Mach>5

def mach_speeds(dict1):   
Objects_by_Mach={}   

for object,data in dict1.items():    
 for value in data["Top Speed(Mach)"]:
    Subsonic=[object for object in dict1 if value<=Mach_scale["Transonic"] and value>Mach_scale["Subsonic"] in dict1["Top Speed(Mach)"] in dict1.values()]      
    Transonic=[object for object in dict1 if value==Mach_scale["Transonic"] in Mach_scale["Top Speed(Mach)"] in dict1.values()]     
    Supersonic=[object for object in dict1 if value<=Mach_scale["Supersonic"] and value>Mach_scale["Transonic"] in dict1["Top Speed(Mach)"] in dict1.values()]      
    Hypersonic=[object for object in dict1 if value>Mach_scale["Hypersonic"] in dict1["Top Speed(Mach)"] in dict1.values()]



return Objects_by_Mach.update({"Subsonic":Subsonic,"Transonic":Transonic,"Supersonic":Supersonic,"Hypersonic":Hypersonic})


print(mach_speeds(Object_dict))

再次感谢各位朋友。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 09:28:05

您可以通过为Mach标度指定范围来概括并缩短代码。这里使用的值可能不正确,但可以很容易地调整以适应。

代码语言:javascript
复制
Mach_scale = {"Subsonic": (0.0, 0.8),
          "Transonic": (0.8, 1.2),
          "Supersonic": (1.2, 5.0),
          "Hypersonic": (5.0, 10.0),
          "High-hypersonic": (10.0, float('inf'))
          }

Object_dict = {"Airbus 380": {"Country": "France,Germany,Spain,UK", "Top Speed(Mach)": 0.89},
            "Concorde": {"Country": "France,UK", "Top Speed(Mach)": 2.01},
            "Boeing X-43": {"Country": "USA", "Top Speed(Mach)": 9.6}}

result = dict()

def getmach(m):
    for k, v in Mach_scale.items():
        if m >= v[0] and m < v[1]:
            return k

for k, v in Object_dict.items():
    result.setdefault(getmach(v['Top Speed(Mach)']), []).append(k)

print(result)

输出:

代码语言:javascript
复制
{'Subsonic': ['Airbus 380'], 'Transonic': ['Concorde'], 'Hypersonic': ['Boeing X-43']}
票数 3
EN

Stack Overflow用户

发布于 2022-04-28 09:47:44

首先,请注意,这个问题是非常具体的,很可能只会帮助你,我们喜欢的问题是一般性的,将帮助尽可能多的人!

在您的代码中有一些东西被认为是错误的实践,并且是有问题的。

首先看起来缩进不是correct

  • Second,--不要使用保留的单词对象--使用不同的变量名

  • 注意,在每次迭代中,您要创建一个新的列表,在我看来您希望更新它,而不是创建一个新的列表。

我会尝试下面的代码:

代码语言:javascript
复制
input = {
    "Airbus 380":{"Country":"France,Germany,Spain,UK","Top Speed(Mach)":0.89},
    "Concorde":{"Country":"France,UK","Top Speed(Mach)":2.01},
    "Boeing X-43":{"Country": "USA","Top Speed(Mach)":9.6}
}

mach_scale = {"Subsonic": 0.8,
              "Transonic": 1.2,
              "Supersonic":5,
              "Hypersonic":5
             }

"""
subsonic speed - below 0.8 mach
transonic speed - between 0.8 - 1.2 mach
supersonic speed - between 1.2 - 5 mach
hypersonic speed - above 5 mach
"""

def mach_speeds(airplane_data):
    subsonic, transonic, supersonic, hypersonic = [], [], [], []
    for plane, data in airplane_data.items():
        top_speed = data["Top Speed(Mach)"]

        if top_speed <= mach_scale["Subsonic"]:
            subsonic.append(plane)
        elif top_speed <= mach_scale["Transonic"]:
            transonic.append(plane)
        elif top_speed <= mach_scale["Supersonic"]:
            supersonic.append(plane)
        else:
            hypersonic.append(plane)

    result = {}
    result["Subsonic"] = subsonic
    result["Transonic"] = transonic
    result["Supersonic"] = supersonic
    result["Hypersonic"] = hypersonic

    return result


if __name__ == "__main__":
    print(mach_speeds(input))

输出:

代码语言:javascript
复制
{'Subsonic': [], 'Transonic': ['Airbus 380'], 'Supersonic': ['Concorde'], 'Hypersonic': ['Boeing X-43']}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档