根据python对象的第二个属性访问该对象的属性
我希望在类中找到对象的第二个属性,使第一个属性具有特定值根据python对象的第二个属性访问该对象的属性,python,class,oop,dictionary,attributes,Python,Class,Oop,Dictionary,Attributes,我希望在类中找到对象的第二个属性,使第一个属性具有特定值 Class Day(object): def __init__(self, a_datetime_date): self.date = a_datetime_date self.colour = None 现在,我在一个循环中实例化了大量对象: for x in a_list_of_dates: some_day = Day(x) some_day.colour = 'Red' #
Class Day(object):
def __init__(self, a_datetime_date):
self.date = a_datetime_date
self.colour = None
现在,我在一个循环中实例化了大量对象:
for x in a_list_of_dates:
some_day = Day(x)
some_day.colour = 'Red' # or some other values depending on the details
由于对对象非常陌生,我只是将它们保存在一个dict中。{'1':,'2':,等等}
现在有没有一种简单的方法来检索与日期范围相对应的颜色
?或者,更简单地说,是一次约会
我只能想做一些类似于排序(dict.iteritems())的事情,然后逐个检查列表检查day\u object.date
。如果是我想要的日期,那么使用day\u object.color
查找有关颜色的信息
这个问题的答案有两种形式:
颜色)。所以@cole的建议是好的,但不适合这么多属性。这些对象用于计算各种事情:300天中有多少是休息?半天有多少天?也许我在使用复杂的列表/目录和移动到完整的ORM之间左右为难
您确定不需要数组吗?这两种数据结构都可以轻松处理几百个对象,但在这里使用数组对我来说更有意义
我会使用过滤器
过滤器(lambda-day:min\u-date
请注意,这是假设您有一个日期数组
在写了这篇文章之后,我想到了一个想法:为什么不完全删除对象,只使用一个dict,其中键是datetime对象,值是颜色?不过,您仍然需要筛选以获得范围(至少应该比排序快)
您确定不需要数组吗?这两种数据结构都可以轻松处理几百个对象,但在这里使用数组对我来说更有意义
我会使用过滤器
过滤器(lambda-day:min\u-date
请注意,这是假设您有一个日期数组
在写了这篇文章之后,我想到了一个想法:为什么不完全删除对象,只使用一个dict,其中键是datetime对象,值是颜色?不过,您仍然需要筛选以获得一个范围(至少应该比排序快)。如果您想要的是一个dict,那么您不应该在这里使用类。这里有一个。与类列表相比,使用dict列表要容易得多。你甚至可以有一个dict,每个键都是日期,如果每个键都是唯一的
当你说你“用口述保存了他们”时,你是什么意思?你把每个类都复制成一个dict,每个类都有一个数字键?这是对内存和CPU时间的浪费。如果您想要的是一个dict,那么可能不应该在这里使用类。这里有一个。与类列表相比,使用dict列表要容易得多。你甚至可以有一个dict,每个键都是日期,如果每个键都是唯一的
当你说你“用口述保存了他们”时,你是什么意思?你把每个类都复制成一个dict,每个类都有一个数字键?这是对内存和CPU时间的浪费。首先,列表是一种更好的数据结构,可以满足您的需要。除非这些键有一些从问题中看不出的含义
你可以通过列表理解来做你想做的事情(一旦所有事情都在列表中)
foo=list()
对于日期中的日期:
某天=天(日期)
某一天。颜色=‘红色’
foo.append(某天)
values=[x.color for x in foo if date_1首先,列表是一个更好的数据结构,可以满足您的需要。除非键有一些从问题中看不明显的含义
你可以通过列表理解来做你想做的事情(一旦所有事情都在列表中)
foo=list()
对于日期中的日期:
某天=天(日期)
某一天。颜色=‘红色’
foo.append(某天)
values=[x.foo中x的颜色,如果date_1我认为您可以使用对分
和orderedict
import bisect
from collections import OrderedDict
def foo(date):
day = Day(date)
day.colour = 'Red' # or some other values depending on the details
return day
container = OrderDict({date: foo(date) for date in sorted(date_list)})
keys = list(container.keys())
# find by range of dates
start_index = bisect.bisect_left(keys, start_date)
end_index = bisect.bisect(keys, end_date)
for index in range(start_index, end_index);
print(container[keys[index]].colour)
# find by a single date
print(container[single_date].colour)
我认为您可以使用对分
和有序数据交换
import bisect
from collections import OrderedDict
def foo(date):
day = Day(date)
day.colour = 'Red' # or some other values depending on the details
return day
container = OrderDict({date: foo(date) for date in sorted(date_list)})
keys = list(container.keys())
# find by range of dates
start_index = bisect.bisect_left(keys, start_date)
end_index = bisect.bisect(keys, end_date)
for index in range(start_index, end_index);
print(container[keys[index]].colour)
# find by a single date
print(container[single_date].colour)
除了查找颜色外,我不确定您还打算做什么。请尝试使用颜色哈希字典;这将保持颜色和日期之间的关系:
from collections import defaultdict
color_dict = defaultdict(list)
for x in a_list_of_dates:
some_day = Day(x)
some_day.colour = 'Red' # Not sure how you're planning to make these assignments.
colour_dict['Red'].append(some_day)
# Look up all Day objects colored Red
colour_dict['Red']
在re中:“一种查询dict中对象的方法,以获得我感兴趣的日子的颜色。”
如果您想使用当前的字典数据结构,我不推荐:):
但您会注意到,您的密钥在此表单中没有太多意义或实用性,因此我建议将其存储在列表中,而不是存储在dict中。一旦存储在列表中,您可以运行以下命令以获取所有红色的日期:
[day for day in list_of_days if day.colour='Red']
替代解决方案:
将数据存储在数据框中。通过这种方式,您可以以表格格式(即列=[日期、颜色、IsHalfDay等])对数据进行切片和切分
对于快速的轻量级ORM解决方案,请尝试一对多(颜色对日)或多对多(颜色对日)关系
除了查找颜色外,我不确定您还打算做什么。请尝试使用颜色哈希字典;这将保持颜色和日期之间的关系:
from collections import defaultdict
color_dict = defaultdict(list)
for x in a_list_of_dates:
some_day = Day(x)
some_day.colour = 'Red' # Not sure how you're planning to make these assignments.
colour_dict['Red'].append(some_day)
# Look up all Day objects colored Red
colour_dict['Red']
在re中:“一种查询dict中对象的方法,以获得我感兴趣的日子的颜色。”
如果您想使用当前的字典数据结构,我不会这么做