从列表中按键生成字典列表

 无心无嗔_170 发布于 2023-02-04 17:36

我有一个清单:

['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 
 'QS', 'TS', 'JS', 'KS']

我需要得到这样的字典:(排序并不重要)

{'C': ['QC', '8C', '7C', '5C', '3C', '2C'], 
 'S': ['AS', 'KS', 'QS', 'JS', 'TS']
}

码:

def parse_flush(cards):
    cards = sort_by_color(cards)
    flush_dic = {}
    print str(cards)
    count = 0
    pos = 0
    last_index = 0
    for color in colors:
        for i, card in enumerate(cards):
            if card[1] == color:
                count += 1
                last_index = i+1
                if count == 1:
                    pos = i
        if count >= 5:
            flush_dic[color] = sort_high_to_low(cards[pos:last_index])
        count = 0
    return flush_dic

我的代码现在看起来像,它的工作但我不喜欢它的长度可以使用python技巧缩短它?

1 个回答
  • 您可以使用simple collections.defaultdict来获得所需的结果

    from collections import defaultdict
    result = defaultdict(list)
    for item in data:
        result[item[1]].append(item)
    print result
    

    产量

    {'S': ['AS', 'QS', 'TS', 'JS', 'KS'],
     'H': ['TH'],
     'C': ['8C', '2C', 'QC', '5C', '7C', '3C'],
     'D': ['6D', 'TD']}
    

    您也可以使用itertools.groupby它来解决这个问题

    data = ['8C', '2C', 'QC', '5C', '7C', '3C', '6D', 'TD', 'TH', 'AS', 'QS',
            'TS', 'JS', 'KS']
    
    from itertools import groupby
    from operator import itemgetter
    keyFn = itemgetter(1)
    print {k:list(grp) for k, grp in groupby(sorted(data, key = keyFn), keyFn)}
    

    说明

    sorted返回已排序的项目列表,keyFn用于排序数据.

    groupby接受一个排序列表,并根据它对项目进行分组keyFn,在这种情况下,keyFn返回每个项目的第二个元素,结果如输出中所示.

    2023-02-04 17:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有