2017-10-26 10 views
1

私は約58,000行のリストを持ち、各行は辞書です。KeyErrorを生成する欠落したキーの場所を特定します

例:各辞書インサイド

my_list_of_dicts = 
[{'id': '555', 'lang': 'en'}, 
{'id': '444', 'lang': 'en'}, 
{'id': '333', 'lang': 'fr'}, 
{'id': '222', 'lang': 'es'}, 
{'id': '111', 'lang': 'ge'}, 
{'id': '666', 'lang': 'fr'}, 
{'id': '777', : 'du'}] 

は、私は、EN 『『ES』「(いくつかの言語のための略語である、対応する値に』キー」LANGを持っていることがわかります、 「FR」、「ドゥ」、「GE」、等...)

私は正常私は、このキー内で一意の値のすべてのvalue_countが含まれているシリーズを生産するために必要なコードを書かれている。

しかし、これを行うと、KeyErrorが発生します。明らかに、いくつかの辞書があります'lang'値は含みません。

try/exceptコマンドを作成して、これらの欠損値をスキップできるようにしました。 5万8000のうち5行には「lang」キーがありません。

「lang」の欠損値の場所を探したいと思います。言い換えると、約58,000行のうち、どの5行に 'lang'キーがないのかを見つける方法はありますか?

+2

'[my_list_of_dicts内アイテムのアイテムではない項目で "LANG" の場合]' – Sraw

+0

感謝。これにより、欠落した 'lang'値を持つ行のリストが生成されます。しかし、これは私に58,000のリスト内のこれらの行の位置を示すものではありません。私は、例えば、 'lang'キーがない行が10,453行と20,432行と22,304行と52,302と55,211行であることを確認したいと考えています。それを行う方法はありますか? – TJE

+1

'my_list_of_dicts [index]]の中に「lang」がない場合の範囲内のインデックスのインデックス(len(my_list_of_dicts)) – Sraw

答えて

1

counter = 0: 
for item in my_list_of dicts: 
     if "lang" not in item: 
      print(counter) 
     counter += 1 

をコメントで上記の解答をオフに行く:

my_list_of_dicts = 
[{'id': '555', 'lang': 'en'}, 
{'id': '444', 'lang': 'en'}, 
{'id': '333', 'lang': 'fr'}, 
{'id': '222', 'lang': 'es'}, 
{'id': '111', 'lang': 'ge'}, 
{'id': '666', 'lang': 'fr'}, 
{'id': '777', "missing_lang": 'du'}] 
missing_vals = [i for i, a in enumerate(my_list_of_dicts) if not a.get("lang", False)] 

ベアであなたが持っていた元の辞書: 'du'無効なキーと値のペアです。ファイルを実行するとエラーが発生します。したがって、デモンストレーションの目的でプレースホルダの値を追加しました。

+0

はい、これは完全に機能します。私が探していた列が見つかりました。ありがとう! – TJE

0

あなたはgetenumerateを使用することができ、IDキーを取得するには、

for item in my_list_of_dicts: 
     if "lang" not in item: 
      print(item['id']) 
0

あなたのリストは、dictにキーがないため実際の例ではありません。 のは、それがそのように見えると仮定しましょう: my_list_of_dicts = [ {'id': '555', 'lang': 'en'}, {'id': '444', 'lang': 'en'}, {'id': '777', 'x': 'du'}]

あなたは、インデックスとアイテム使用とのタプルのリストを取得することができます。

[(index, item) for index, item in enumerate(my_list_of_dicts) if 'lang' not in item]

0

この質問はパンダをラベル付けされているので、あなたがデータフレームのコンストラクタを試みることができます:

In [11]: my_list_of_dicts = \ 
    ...: [{'id': '555', 'lang': 'en'}, 
    ...: {'id': '444', 'lang': 'en'}, 
    ...: {'id': '333', 'lang': 'fr'}, 
    ...: {'id': '222', 'lang': 'es'}, 
    ...: {'id': '111', 'lang': 'ge'}, 
    ...: {'id': '666', 'lang': 'fr'}, 
    ...: {'id': '777', }] # example one with no lang 

In [12]: df1 = pd.DataFrame(my_list_of_dicts) 

In [13]: df1 
Out[13]: 
    id lang 
0 555 en 
1 444 en 
2 333 fr 
3 222 es 
4 111 ge 
5 666 fr 
6 777 NaN 

In [14]: df1[df1.lang.isnull()] # rows with a NaN (missing) lang 
Out[14]: 
    id lang 
6 777 NaN 
関連する問題