[英]Python add missing element into list
我有一个以一个月中的某天为键的列表,我想添加所有缺失的日期,值为 0。
这是一个示例:
tab = [{'day':3, 'value':50, 'label': 'Element 1' }, {'day':5, 'value':20, 'label': 'Element 2'},{'day':11, 'value':3, 'label': 'other label'},{'day':15, 'value':5, 'label': 'something'}]
我正在寻找这样的东西:
tab = [{'day':1, 'value':0, 'label': 'some label'}, {'day':2, 'value':0, ‘label': 'something'}, ...,{'day':30, 'value':0, 'label': 'value label'}]
有什么更好的方法来做到这一点。
这是我的代码:
new_tab = []
for i in range(1, 30):
if i not in existing_day:
new_tab.append({'day': i, 'value': 0, 'label':''})
else:
elt = [x for x in tab if x['day'] == i]
new_tab.append(elt[0])
只需循环显示日期数。 使用您的dict
格式list
:
tab = [{'day':3, 'value':50}, {'day':5, 'value':20},{'day':11, 'value':3},{'day':15, 'value':5}]
newtab=[]
for i in range(1,32):
newtab.append({i: tab[i] if i in tab else 0})
或者(推荐)使用单个dict
格式:
tab = {3:50,5:20,11:3,15:5}
newtab={}
for i in range(1,32):
newtab[i] = tab[i] if i in tab else 0
您可以简单地运行从 1 到 31 的数字,然后在其中添加 mssing 部分。 但是,记录列表本身对于检索给定日期的数据是不利的:一个根本无法使用tab[3]
来获取“第 3 天”的信息,这将是 O(1),而不是一个必须执行整个列表的搜索,检查每个记录r['day'] == 3
这是一个线性搜索。
您可以创建一个类,作为使用它的任何人的映射,按天索引记录,并在给定日期没有数据时返回适当的默认记录。
它可能很复杂,但最终,您需要的只是一个将索引创建为字典并具有__getitem__
方法的类:
class TabIndex:
def __init__(self, tab):
self.indexed = {record["day"]: record for record in tab}
def __getitem__(self, index):
return self.indexed.get(index, {"day": index, "value": 0})
以下是如何使用它,在交互式会话中演示:
In [41]: tab = [{'day':3, 'value':50, 'label': 'Element 1' }, {'day':5, 'value':20, 'label': 'Element 2'},{'day':11, 'value':3, 'label': 'other label'},{'day':15, 'value':5, 'label': 'something'}]
In [42]: x= TabIndex(tab)
In [43]: x[20]
Out[43]: {'day': 20, 'value': 0}
In [44]: x[3]
Out[44]: {'day': 3, 'value': 50, 'label': 'Element 1'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.