我有一个json在下面
a = {"infinity_war":["Stark", "Hulk", "Rogers", "Thanos"],
"end_game":["Stark", "Dr.Strange", "Peter"]}
既然名字"Stark"在整个json中重复不止一次,我只需要保留一个"Stark"然后把其他的移走。我尝试使用熊猫,但它需要所有的列表具有相同的长度。还有别的办法吗?我需要的结果是
a = {"infinity_war":["Stark", "Hulk", "Rogers", "Thanos"],
"end_game":["Dr.Strange", "Peter"]}
您可以使用一个简单的循环和一个集合来跟踪看到的元素:
seen = set()
b = {}
for k,l in a.items():
b[k] = [x for x in l if not (x in seen or seen.add(x))]
输出:
{'infinity_war': ['Stark', 'Hulk', 'Rogers', 'Thanos'],
'end_game': ['Dr.Strange', 'Peter']}
工作原理:
对于每个键/列表对,遍历列表的元素。
seen.add(x)
总是False,因为set.add
返回None,因此(x in seen or seen.add(x))
具有布尔值x in seen
,我们将其与not
反转。