迭代月份列表时插入无

时间:2016-05-05 00:07:28

标签: python python-2.7

我有一个年/月范围的清单。然后,我也有这种格式的用户数:total_users,month,year。

基本上,当all_months_necessary中没有月份的计数值时,我需要插入None

all_months_necessary=('2015/1', '2015/2', '2015/3', '2015/4', '2015/5', '2015/6', '2015/7', '2015/8', '2015/9', '2015/10', '2015/11', '2015/12', '2016/1')

users_count=[(2L, 1.0, 2015.0), (1L, 3.0, 2015.0), (1L, 1.0, 2016.0)]

我正在尝试使用此代码,但问题是我的Nones比预期的要多。

data=()
for each_month in all_months_necessary:                        
    for total, month, year in users_count:
        if each_month == str(int(year))+'/'+str(int(month)):
            data = data + (total,)
        else:
            data = data + (None,)

预期:data=(2L, None, 1L, None, None, ..., 1L)

3 个答案:

答案 0 :(得分:2)

@if (HasMultipleResults()) { var shapeFactory = (IShapeFactory)New; // this doesn't work var multipleResultsShape = (dynamic)shapeFactory.Create("Search_MultipleResults", Model); @Display(multipleResultsShape); return; } 转换为字典可能更好。 又一个 one twoliner:

users_count

加上杰森的解释

答案 1 :(得分:1)

问题是每次循环第二个for循环时都要创建一个新的列表元素,这意味着对于每个each_monthdata中有三个条目,而不是一个条目期望。这是一个修复:

data=()
i = 0
for each_month in all_months_necessary:                        
    for total, month, year in users_count:
        if each_month == str(int(year))+'/'+str(int(month)):
            data = data + (total,)
            break
    else:
        data = data + (None,)

答案 2 :(得分:0)

一种不同的方法,但可以满足我的需要。

user_count_data=[]
for total, month, year in users_count:
    d={}
    d['month_year'] = str(int(year))+'/'+str(int(month))
    d['count'] = total
    user_count_data.append(d)

data=()
for each_month in all_months_necessary:              
    data = data + (next((item['count'] for item in user_count_data if item.get("month_year") and item["month_year"] == each_month), None), )

输出:(2L, None, 1L, None, None, None, None, None, None, None, None, None, 1L)