关于python列表/字典,我有一个相当基本的问题,我想提供一些帮助。
我有一些有关电动汽车的数据,它们有不同的特点。每一辆电动汽车都有:
我该怎么做才好呢?我一直在尝试各种列表/数据的组合,但无法完全发挥作用。我希望能够通过以下方式访问这些数据:
EV['ID'][2]['Batt']['SOC'][5] which would return e.g. 0.95 or
EV[12345]['Batt']['SOC'][5]
我最近的尝试是:
EV = defaultdict(lambda: defaultdict(dict))
EV['ID']['Batt']['Time']=[]
EV['ID']['Batt']['SOC']=[]
EV['ID']['Batt']['Size'] = 24
但是,这不允许输入多个‘ID,这些’ID位于另一个列表admin‘’ID‘中。它产生了:
{'ID': defaultdict....,{'Batt':{'SOC:[], 'Size':24, 'Time':[]}}}}
我很感谢你的帮助!
发布于 2012-05-29 15:53:22
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"
发布于 2012-05-29 16:04:41
对对象执行操作可能是一个更好的选择,但这可能取决于细节。要做到这一点,只需使用列表和字典,我将执行以下操作:
有一个由车辆ID键组成的字典,每个条目都是一个包含两个条目( battery
和charge
)的字典。battery
条目将只包含电池的大小作为一个整数或它需要的任何东西。charge
条目将是从0索引的电荷读数的列表。
evs = {10001: {battery: 24, charge: [95, 90, ...]}, 11002: { ... }, ...}
然后,您可以从其ID中获得给定EV的电池大小:
evs[id]['battery']
或获取给定ID的给定时间段的计费读数:
evs[id]['charge'][120] # corresponds to 10:00:00 to 10::05:00
显然,您可以做出一个很好的功能来完成时间/索引翻译,就像其他海报所建议的那样。
https://stackoverflow.com/questions/10802332
复制相似问题