0

嗨,这是我正在尝试做的一个例子

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

list = ["Ack","Ashley","book","channel","Charlie","David","Eli,"George""Zebra"]

我怎样才能打印这个

  1. 如果有一个变量,它将不带括号或引号打印
  2. 例如,如果有多个,它将​​根据字典用括号将它们分组

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
4

2 回答 2

2

这些方面的东西应该起作用

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],
于 2012-07-12T05:44:13.453 回答
1

如果原始列表按您进行分组的相同键排序,这应该是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
于 2012-07-12T05:40:43.393 回答