我有一个年/月范围的清单。然后,我也有这种格式的用户数: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)
答案 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_month
,data
中有三个条目,而不是一个条目期望。这是一个修复:
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)