python - 有没有办法检查列表项是否是列表中的唯一项?
问题描述
我有一个字典列表,整个列表代表不同的国家,每个字典都包含每个国家的基本数据,如下所示: 示例 a
df.countries[3]
"[{'iso_3166_1': 'DE', 'name': 'Germany'}, {'iso_3166_1': 'US', 'name': 'United States of America'}, {'iso_3166_1': 'IN', 'name': 'India'}]"
当然,还有其他单元格,其中国家列表只有一个这样的字典: 示例 b
df.countries[0]
"[{'iso_3166_1': 'US', 'name': 'United States of America'}]"
或像这样的空列表: 示例 c
df.countries[505]
'[]'
我想做的是:
- 删除国家名称为美利坚合众国的行,但仅当它是列表中唯一的国家时,而不是当有其他国家时,例如a。
我试图集思广益,想出了这样的事情:
countryToRemove = "United States of America"
for index, row in df.iterrows():
if countryToRemove in row['countries']:
# row to be removed
但即使有其他国家,它也会删除其中包含美国的任何行。
编辑:我的数据框如下:
countries
0 [{'iso_3166_1': 'DE', 'name': 'Germany'}, {'is...
1 [{'iso_3166_1': 'US', 'name': 'United States o...
2 []
解决方案
如果你有这样的数据框:
countries
0 [{'iso_3166_1': 'DE', 'name': 'Germany'}, {'is...
1 [{'iso_3166_1': 'US', 'name': 'United States o...
2 []
然后您可以使用布尔索引来过滤掉您的数据框:
mask = df.countries.apply(
lambda x: len(s := set(d["name"] for d in x)) == 1
and s.pop() == "United States of America"
)
print(df[~mask])
印刷:
countries
0 [{'iso_3166_1': 'DE', 'name': 'Germany'}, {'is...
2 []
编辑:没有:=
运营商的版本:
def fn(x):
s = set(d["name"] for d in x)
return len(s) == 1 and s.pop() == "United States of America"
mask = df.countries.apply(fn)
print(df[~mask])
推荐阅读
- android - 二进制阈值图像-> 应用精明的边缘检测-> findContour(),这会改善轮廓检测吗?
- flutter - 添加依赖项时颤动中的gradle错误
- ios13 - hasDifferentColorAppearance is true when app is backgrounded
- node.js - 在 NPM 包中声明全局命令
- sql - 涉及到同一个表的数十个连接的查询不返回所有结果
- android - 让安卓应用在后台运行
- javascript - 如何在本地存储或用户设置的cookie中实现数据存储?
- sql - 向 SSAS 多维数据集添加相关维度
- android - 仅在 API 21 和 22、WebView 和 Consent SDK 上崩溃 - Resources$NotFoundException
- arrays - 如何在猫鼬中使用一组 ID 变量查询 find()?