0

私のプログラムは、いくつかの Web サイトをスクレイピングし、2 つのリスト (1 つはカテゴリ用、もう 1 つはコンテンツ用) を作成します。次に、dict(zip(......))コマンドを使用してそれらを照合し、dict に入れます。

このようなもの:

complete_dict=dict(zip(category_list,info_list))

プログラムが両方のリスト(カテゴリ、情報)で空の要素を読み取っているという問題に遭遇しました。後で削除できれば問題ありません。問題は、そうする方法を見つけることができなかったことです。読み取ると、両方のリストに空の文字列ではなく空の要素が含まれますが、リスト内の空のリストに似ています。次のようなコマンドを使用して、それらを圧縮した後、リストと辞書の両方でそれらを削除しようとします。

category_list=filter(None, category_list)

また:

info_list=[x for x in info_list if x != []]

もちろん、操作は両方のリストに対して行われます。

勝ったものはありませんでした。私はそれから辞書でそれをやってみました:

dict((k, v) for k, v in complete_list.iteritems() if v)

この時点で他に何を試すことができますか?

編集

フィルタリングを試みましたが、条件が正しく設定されていないか、単に問題が解決されません。私は別の方法を探しているので、別のスレッドの複製ではありません (ただし、そのスレッドにはいくつかの有用な情報があります)。

編集 2

私が今得ているのは:

[u'info1', u'info2', u'info3', u'info4', ...]

[]

[]

[]

[]

[u'info1', u'info2', u'info3', u'info4', ...]

[]

[]

[]

[u'info1', u'info2', u'info3', u'info4', ...]

情報 1、2、3、および 4 (実際にはもっと多くの要素があります) は、Web サイトからスクレイピングされたコンテンツです。申し訳ありませんが、それらが何であるかを実際に明らかにすることはできませんが、アイデアは示されています。これはリスト (info_list) の 1 つです。途中で詰まっている [] をすべて削除しようとしているので、結果は次のようになります。

[u'info1', u'info2', u'info3', u'info4', ...]

[u'info1', u'info2', u'info3', u'info4', ...]

[u'info1', u'info2', u'info3', u'info4', ...]

等々

編集 3

dict(zip(...)) の後、私の結果は次のようになります

{u'category1': u'info1', u'category2': u'info2', ...}

{}

{}

{u'category1': u'info1', u'category2': u'info2', ...}

{u'category1': u'info1', u'category2': u'info2', ...}

{}

{}

{}

等々。

4

3 に答える 3

2

is not Noneチェック付きの辞書内包表記の使用:

info_list = {k: v for (k, v) in complete_list.iteritems() if v is not None}

辞書内包表記に関するドキュメントから

于 2015-05-26T18:12:52.007 に答える
-1

フィルターを使用してください。間違っていました。最初の引数は、1 つの引数を受け入れる呼び出し可能でなければなりません。組み込みの bool 関数を使用できます

category_list = filter(bool, category_list)
于 2015-05-26T18:12:28.887 に答える