1
data= [('a ', 1), ('b ', 3), ('a ', 4), ('b', 2),]

タプルの最初の要素がリスト名で、2 番目の要素が値である 2 つのリストを取得するにはどうすればよいですか?

a= [1,4]
b= [3,2]
4

4 に答える 4

6

前の質問で説明したように、バインドする名前を変更しようとしないでください。【の左側something = 3、つまり】トラブル以外の何物でもありません。dict代わりに使用することができ、それdefaultdictは物事を便利にするでしょう:

>>> data= [('a ', 1), ('b ', 3), ('a ', 4), ('b', 2),]
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for k, v in data:
...     d[k.strip()].append(v)
...     
>>> d
defaultdict(<type 'list'>, {'a': [1, 4], 'b': [3, 2]})

その後

>>> d['a']
[1, 4]
>>> d['b']
[3, 2]

動作します。

于 2013-02-15T20:54:17.007 に答える
1

あなたの例のいくつかのキーには余分な空白があるので、私は以下を使用していstripます:

In [11]: [x[1] for x in data if x[0].strip() == 'a']
Out[11]: [1, 4]

In [12]: [x[1] for x in data if x[0].strip() == 'b']
Out[12]: [3, 2]
于 2013-02-15T20:51:08.387 に答える
0

レブの答えはあなたが探しているものです。さらに、ouは任意のキーでグループ化できます。

grouped = defaultdict(list)
[grouped[key].append(value) for key, value in data]    

ちなみに、defaultdictは、検討する価値のある多くの組み込みタイプの1つです。あなたの日常の問題を解決するかもしれない多くのタイプと機能があります。少なくともoperatoritertoolsfunctoolsモジュールを確認してください。

于 2013-02-15T20:55:48.580 に答える
0

複数の変数を作成する代わりに、ここで辞書を使用する必要があります。

In [14]: data= [('a ', 1), ('b ', 3), ('a ', 4), ('b',2),]

In [15]: dic={}

In [16]: for k,v in data:
   ....:     dic.setdefault(k.strip(),[]).append(v)
   ....:     

In [18]: dic
Out[18]: {'a': [1, 4], 'b': [3, 2]}
于 2013-02-15T21:06:08.300 に答える