gpt4 book ai didi

python - 有没有办法检查列表项是否是列表中的唯一项?

转载 作者:行者123 更新时间:2023-12-04 03:27:49 25 4
gpt4 key购买 nike

我有一个字典列表,整个列表代表不同的国家,每个字典包含每个国家的基本数据如下:示例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 []

然后您可以使用 bool 索引来过滤掉您的数据框:

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])

关于python - 有没有办法检查列表项是否是列表中的唯一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67325614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com