1

私はPythonが初めてです。大胆さのコースでそれを研究してきましたが、今はさらに学ぶために何かをしようとしています.

この短いコード ブロックを作成しました。

list_a = []
list_b = []
for e in a_list:
    list_a.append(e['a'])
    list_b.append(e['b'])
list_b = set(list_b)

(list_a も重複を含むべきではありませんが、最初は試行されないため、コードの見栄えが良くなり、実行しやすくならない限り、厳密にセットにする必要はありません)

私のこのコードを見た後、それはエレガントでもPythonicでもないようです。

私の質問は、これをどのように再フォーマットすればよいですか? 物事の正しい正しいやり方を学びたいと思います。

ここでの目標は、項目として辞書を含む a_list というリストを調べることです。次に、ディクショナリ内の各項目について、キー「a」の値を list_a という名前の新しいリストに追加し、キー「b」についても同じことを行います。ただし、キー 'b' のリストはセットである必要があり、厳密には重複を含めてはなりません。

ありがとうございました。

4

2 に答える 2

3

これはa_list2回以上繰り返されますが、次のように書き直すことができます。

list_a = [e['a'] for e in a_list]
set_b = {e['b'] for e in a_list}

Python2.7以降を想定しています。

2行目のリスト内包ではなく、集合の内包を行っているため、set_b代わりに名前を選択しました。list_b

1回だけ繰り返すa_list場合は、少なくとも1つのリストの作成をスキップできます。

list_a = []
set_b = set()
for e in a_list:
    list_a.append(e['a'])
    set_b.add(e['b'])
于 2012-10-14T20:22:22.200 に答える
2

@TimPietzckerは素晴らしい解決策を提供しました。list_aデータをandのような変数名で保存するのではなく、list_b引き出したいキーが 9 つあるとしたらどうしますか? -- 別の辞書 (Python 2.7 以降) を使用する方がより Pythonic だと思います。

>>> list_of_dicts = [{'a': 1, 'b': 10}, {'a': 2, 'b': 20, 'c': 30}]
>>> keep = ('a', 'b')
>>> by_key = {k: {d[k] for d in list_of_dicts} for k in keep}
>>> by_key
{'a': set([1, 2]), 'b': set([10, 20])}

そして、の代わりにlist_a、使用します

>>> by_key['a']
set([1, 2])
于 2012-10-14T20:45:42.663 に答える