确定产生 KeyError 的缺失键的位置
Identify location of missing keys that produce KeyError
我有一个大约 58,000 行的列表,每一行都是一个字典。
示例:
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'}]
在每本词典中,你会看到我有一个键“lang”和对应的值,它是几种语言的缩写('en'、'es'、'fr', 'du', 'ge', 等等...)
我已经成功编写了代码,我需要生成一个系列,其中包含此键中所有唯一值的 value_count。
然而,当我这样做时,我得到一个 KeyError,因为显然有一些字典不包含 'lang' 值。
我创建了一个 try/except 命令,允许我跳过这些缺失值。看起来 58,000 行中大约有 5 行缺少 'lang' 键。
我想找到 'lang' 这些缺失值的位置。换句话说,在大约 58,000 行中,我如何找到哪 5 行缺少 'lang' 键?
在评论中取消上面的答案,
counter = 0:
for item in my_list_of dicts:
if "lang" not in item:
print(counter)
counter += 1
要获取 ID 密钥,
for item in my_list_of_dicts:
if "lang" not in item:
print(item['id'])
您可以使用 get
和 enumerate
:
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'
是一个无效的键值对,当您 运行 您的文件时会引发错误。因此,为了演示的目的,我添加了一个占位符值。
你的列表不是真实的例子,因为字典中没有键。
让我们假设它看起来像这样:
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]
由于这个问题被标记为 pandas,您可以尝试 DataFrame 构造函数:
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
我有一个大约 58,000 行的列表,每一行都是一个字典。
示例:
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'}]
在每本词典中,你会看到我有一个键“lang”和对应的值,它是几种语言的缩写('en'、'es'、'fr', 'du', 'ge', 等等...)
我已经成功编写了代码,我需要生成一个系列,其中包含此键中所有唯一值的 value_count。
然而,当我这样做时,我得到一个 KeyError,因为显然有一些字典不包含 'lang' 值。
我创建了一个 try/except 命令,允许我跳过这些缺失值。看起来 58,000 行中大约有 5 行缺少 'lang' 键。
我想找到 'lang' 这些缺失值的位置。换句话说,在大约 58,000 行中,我如何找到哪 5 行缺少 'lang' 键?
在评论中取消上面的答案,
counter = 0:
for item in my_list_of dicts:
if "lang" not in item:
print(counter)
counter += 1
要获取 ID 密钥,
for item in my_list_of_dicts:
if "lang" not in item:
print(item['id'])
您可以使用 get
和 enumerate
:
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'
是一个无效的键值对,当您 运行 您的文件时会引发错误。因此,为了演示的目的,我添加了一个占位符值。
你的列表不是真实的例子,因为字典中没有键。
让我们假设它看起来像这样:
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]
由于这个问题被标记为 pandas,您可以尝试 DataFrame 构造函数:
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