Python数据结构advi

2024-06-16 12:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于python列表/字典的基本问题,我想得到一些帮助。在

我有一些关于电动汽车的数据,它们有不同的特性。每辆电动汽车都有:

  • ID,例如12345
  • A电池尺寸,例如24
  • 一天中每五分钟的收费状态,例如00:05:00:1;00:10:00:0.95

我该怎么做?我一直在尝试各种列表/字典的组合,但都不能很好地发挥作用。我希望能够通过以下方式访问数据:

EV['ID'][2]['Batt']['SOC'][5] which would return e.g. 0.95 or
EV[12345]['Batt']['SOC'][5]

我最近的尝试是:

^{pr2}$

但是这不允许在另一个list admin['ID']中输入多个ID。它产生了:

{'ID': defaultdict....,{'Batt':{'SOC:[], 'Size':24, 'Time':[]}}}}

谢谢你的帮助!在


Tags: 数据id列表字典电池状态尺寸特性
2条回答
from collections import defaultdict
import datetime

class ElectricVehicle(object):
    ev_by_id = {}
    ev_by_battery = defaultdict(list)

    @classmethod
    def find(cls, id=None, battery=None):
        if id is not None:
            return [cls.ev_by_id[id]]
        elif battery is not None:
            return cls.ev_by_battery[battery]
        else:
            return []

    def __init__(self, id, battery, states):
        self.id = id
        ElectricVehicle.ev_by_id[id] = self

        self.battery = battery
        ElectricVehicle.ev_by_battery[battery].append(self)

        self.states = list(states)

    def state_at(self, time):
        return self.states[(time.hour*60 + time.minute)/5]

ElectricVehicle(12345, 24, [0.99, 0.99, 0.99])
ElectricVehicle(12346, 30, [0.90, 0.90, 0.89])

evs = ElectricVehicle.find(battery=24)
for ev in evs:
    time = datetime.time(0,3,0)    # 00:03:00
    print("{}: {}".format(ev.id, ev.state_at(time)))

# will print "12345: 0.99"

使用对象进行操作可能是更好的选择,但这可能取决于细节。。为了只使用列表和字典,我将执行以下操作:

有一个由车辆ID键入的字典,每个条目都是一个包含两个条目batterycharge的字典。battery条目只包含电池的大小作为整数或任何需要的大小。charge条目将是从0索引的电荷读数列表。在

evs = {10001: {battery: 24, charge: [95, 90, ...]}, 11002: { ... }, ...}

然后您可以从其ID中获得给定EV的电池大小:

^{pr2}$

或获取给定ID的给定时间段的电荷读数:

evs[id]['charge'][120] # corresponds to 10:00:00 to 10::05:00

显然,你可以做一个很好的功能来做时间/索引翻译,就像其他一些海报所建议的那样。在

相关问题 更多 >