6

mylist文字と数字の文字列を含むサブリストを要素とする Python リストがあります。mylist文字ごとに個別のステートメント/ケースを含むコードを使用せずに、文字列の先頭の文字でどのように分割できるか疑問に思っていました。mylist をリストに分割したいとしますa, b, c:

mylist = [['a1'],['a2'],['c1'],['b1']]
a = [['a1'],['a2']]
b = [['b1']]
c = [['c1']]

それらをリストのリストとして保持することが重要です (ただし、各サブリストの単一の要素にすぎません)。

4

3 に答える 3

6

これは機能します:

import itertools as it

mylist  = [['a1'],['a2'],['c1'],['b1']]
keyfunc = lambda x: x[0][0]

mylist = sorted(mylist, key=keyfunc)
a, b, c = [list(g) for k, g in it.groupby(mylist, keyfunc)]

使用される行は、の要素が文字列の先頭の文字でまだソートされていないsorted()場合にのみ必要です。mylist

編集 :

コメントで指摘されているように、より一般的な解決策(変数の数を3つに制限しないもの)は、次のような辞書内包表記(Python 2.7以降で使用可能)を使用することです。

result_dict = {k: list(g) for k, g in it.groupby(mylist, keyfunc)}

これで、答えは最初の文字によって辞書に入力されます。

result_dict['a']
> [['a1'],['a2']]

result_dict['b']
> [['b1']]

result_dict['c']
> [['c1']]
于 2012-05-13T11:45:09.290 に答える
2

辞書を使用することもできます

mylist = [['a1'],['a2'],['c1'],['b1']]

from collections import defaultdict

dicto = defaultdict(list)

for ele in mylist:
    dicto[ele[0][0]].append(ele)

結果:

>>> dicto
defaultdict(<type 'list'>, {'a': [['a1'], ['a2']], 'c': [['c1']], 'b': [['b1']]})

求めていた正確な結果は得られません。ただし、各文字に関連付けられたリストのリストにアクセスするのは非常に簡単です

>>> dicto['a']
[['a1'], ['a2']]
于 2012-05-13T12:17:21.060 に答える
0

これらのサブリストは、単純な関数を使用して取得することもできます。

def get_items(mylist, letter):
  return [item for item in mylist if item[0][0] == letter]

この式item[0][0]は、現在のアイテムの最初の要素の最初の文字を取得することを意味します。次に、各文字に対して関数を呼び出すことができます。

a = get_items(mylist, 'a')
b = get_items(mylist, 'b')
c = get_items(mylist, 'c')
于 2012-05-13T16:18:58.617 に答える