将dict转换为列表列表

时间:2017-01-12 11:00:39

标签: python list dictionary

我有一个看起来像......的默认指令。

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>>,
 ...]

这显然不是我想要的。我该如何更正此代码?

2 个答案:

答案 0 :(得分:3)

无需使用lambda s:

firstnames = [[k,v] for k,v in firstnames.items()]

甚至更短:

firstnames = [list(t) for t in firstnames.items()]

lambda创建一个匿名函数。这意味着您已生成一个函数列表,将两个参数(此处为xy)作为输入,并返回列表[x,y]。在你的方法中甚至没有考虑kv

答案 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()