2012-07-12 85 views
0

嗨繼承人的什麼,我試圖做打印通過一定的映射

讓說有話

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

的有序列表,我怎麼可以打印此這樣的例子的列表和羣組它該

  1. 如果有一個變量,將打印不帶括號或 qutations
  2. 如果有多於一個它將組瓦特第i個基於一個 字典例如

托架他們dictmap = {1:[ 「一個」, 「A」, 「B」, 「B」, 「C」, 「C」], 2:[ 「d」, 「d」, 「e」 的, 「E」, 「F」, 「F」],..

所以所有的起始與從1映射字母的話:將被分組在支架等等

因此上述列表的所需輸出將簡單地爲

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

我不知道什麼嘗試 – pyCthon 2012-07-12 05:27:11

+0

你可以對分組你想更清晰?我看不到'list'和'dictmap'之間的連接。 – xvatar 2012-07-12 05:34:22

+1

你是否按第一個字母分組?我認爲你的字典是無用的,你需要字母作爲keys.eg'{v:k for k,v in dictmap.items()for v in v}'。然後使用itertools.groupby – 2012-07-12 05:37:58

回答

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], 
+0

謝謝所以要在同一行打印這個,我會切換打印與sys.stdout.write? – pyCthon 2012-07-12 05:54:38

+0

@pyCthon,當然,或者只是在打印語句的末尾添加一個逗號。我會將它們添加到我的答案中 – 2012-07-12 05:55:58

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