0

こんにちはここに私がやろうとしていることの例があります

単語の順序付きリストがあるとしましょう

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

どうすればこれを印刷できますか

  1. 変数が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 に答える