繁体   English   中英

Python将缺少的元素添加到列表中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM