我有一个看起来像......的默认指令。
defaultdict(int,
{" u'CAMILLE'": 10,
" u'SAHARA'": 1,
" u'JEREMIAH'": 114,
" u'EDISON'": 9,
...}
我需要像...这样的东西。
[[u'CAMILLE', 10],
[u'SAHARA', 1],
[u'JEREMIAH',114],
[u'EDISON', 9],
...]
两者
firstnames = [lambda x,y:list(x,y) for k,v in firstnames.items()]
和
firstnames = [lambda x,y:[x,y] for k,v in firstnames.items()]
产生
[<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
<function __main__.<lambda>>,
...]
这显然不是我想要的。我该如何更正此代码?
答案 0 :(得分:3)
无需使用lambda
s:
firstnames = [[k,v] for k,v in firstnames.items()]
甚至更短:
firstnames = [list(t) for t in firstnames.items()]
lambda
创建一个匿名函数。这意味着您已生成一个函数列表,将两个参数(此处为x
和y
)作为输入,并返回列表[x,y]
。在你的方法中甚至没有考虑k
和v
。
答案 1 :(得分:2)
使用地图也可以:
AggregationOperation project = Aggregation
.project("tenantId", "storeId", "departmentId","storeName");
AggregationOperation group = Aggregation.group("departmentId", "departmentName")
.count().as("count")
.first("tenantId").as("tenantId")
.first("departmentName").as("departmentName")
.first("sectionName").as("sectionName")
.first("roiName").as("roiName")
.first("objectEntryDate").as("objectEntryDate");
AggregationOperation sortData = Aggregation.sort(Sort.Direction.DESC, "totalNoOfShoppers");
AggregationOperation limit = Aggregation.limit(5);
aggregation = Aggregation.newAggregation(project, group, match, sortData,limit);
AggregationResults<BatchReportResponse> results = mongoTemplate.aggregate(aggregation,Info.class,Response.class);
请注意,在python3中,这将构建一个生成器(因此,正如Willem评论所说,最好是在地图调用周围使用firstnames = map(list, firstnames.items())
,以便在调用时获取值。)
list()