Python 打印列表并按特定映射对其进行分组

Python 打印列表并按特定映射对其进行分组,python,Python,嗨,这是我想做的一个例子 假设有一个有序的单词列表 list = ["Ack","Ashley","book","channel","Charlie","David","Eli,"George""Zebra"] 我怎样才能把这个打印出来 如果有一个变量,它将不带括号或 定量 如果有多个,它将根据一个括号对它们进行分组 例如字典 dictmap={1:[“a”,“a”,“b”,“b”,“c”,“c”],2:[“d”,“d”,“e”, “E”,“f”,“f”] 因此,所有从1:映射的以字母开头的单

嗨,这是我想做的一个例子

假设有一个有序的单词列表

list = ["Ack","Ashley","book","channel","Charlie","David","Eli,"George""Zebra"]
我怎样才能把这个打印出来

  • 如果有一个变量,它将不带括号或 定量
  • 如果有多个,它将根据一个括号对它们进行分组 例如字典
  • dictmap={1:[“a”,“a”,“b”,“b”,“c”,“c”],2:[“d”,“d”,“e”, “E”,“f”,“f”]

    因此,所有从1:映射的以字母开头的单词将分组在括号中,以此类推

    因此,上述列表的期望输出将是

    [Ack,Ashely,book,channel,Charlie] [David,Eli] George Zebra
    

    如果原始列表按分组时使用的键排序,那么这应该是
    itertools.groupby
    的简单应用

    以下是一个未经测试的示例:

    lst = [ ...here's the list of strings... ]
    
    def grouping_key(elem) :
        for i, first_letters in dictmap.iteritems() :
             if elem[0] in first_letters :
                 return i
        return None
    
    for group_key, group_elems in itertools.groupby(lst, key=grouping_key) :
        group_elems = list(group_elems)
        if len(group_elems) == 1 :
            print group_elems[0]
        else :
            print group_elems
    

    如果原始列表按分组时使用的键排序,那么这应该是
    itertools.groupby
    的简单应用

    以下是一个未经测试的示例:

    lst = [ ...here's the list of strings... ]
    
    def grouping_key(elem) :
        for i, first_letters in dictmap.iteritems() :
             if elem[0] in first_letters :
                 return i
        return None
    
    for group_key, group_elems in itertools.groupby(lst, key=grouping_key) :
        group_elems = list(group_elems)
        if len(group_elems) == 1 :
            print group_elems[0]
        else :
            print group_elems
    

    这方面的东西应该行得通

    from itertools import groupby
    L = ["Ack","Ashley","book","channel","Charlie","David","Eli","George","Zebra"]
    D ={v:k for k,v in dictmap.items() for v in v}
    groups = itertools.groupby(L, key=lambda x:D.get(x[0]))
    
    for k,g in groups:
        g=list(g)
        if len(g)>1:
            print g,
        else:
            print g[0],
    

    这方面的东西应该行得通

    from itertools import groupby
    L = ["Ack","Ashley","book","channel","Charlie","David","Eli","George","Zebra"]
    D ={v:k for k,v in dictmap.items() for v in v}
    groups = itertools.groupby(L, key=lambda x:D.get(x[0]))
    
    for k,g in groups:
        g=list(g)
        if len(g)>1:
            print g,
        else:
            print g[0],
    

    我不知道该尝试什么你能更清楚地知道你想要的分组吗?我看不出
    列表和
    dictmap
    之间的联系你是按第一个字母分组的吗?我认为你的dictmap是无用的,你需要这些字母作为键。例如
    {v:k代表k,v在dictmap.items()代表v在v}
    。然后使用itertools。groupby@xvatar更清楚吗?我只想根据字典中映射的键对它们进行分组,不要将变量命名为内置变量。
    list(g)
    在我的回答中,如果你用一个局部变量来隐藏
    列表,我不知道该尝试什么。你能更清楚地知道你想要的分组吗?我看不出
    列表和
    dictmap
    之间的联系。你是按第一个字母分组的吗?我认为你的dictmap没有用,你需要这些字母作为键。eg
    {v:k代表k,v在dictmap中。items()代表v在v}
    。然后使用itertools。groupby@xvatar更清楚吗?我只想根据字典中映射的键对它们进行分组,不要将变量命名为内置变量。
    list(g)
    在我的回答中,如果你用一个本地变量来隐藏
    列表,那就不起作用了谢谢,所以要在同一行上打印,我会用sys.stdout.write?@pyCthon切换打印,当然,或者在打印语句的末尾加一个逗号。我会把它们添加到我的回答中。谢谢,要在同一行上打印,我会用sys.std切换打印out.write?@pyCthon,当然可以,或者在打印语句的末尾加一个逗号。我会把它们添加到我的答案中