【发布时间】:2020-06-05 00:43:52
【问题描述】:
根据元组的第一个元素从元组列表中创建一个集合。
[(name1, 1), (name2, 2), (name1, 3)] 应该返回 [(name1, 1), (name2, 2)]。
【问题讨论】:
根据元组的第一个元素从元组列表中创建一个集合。
[(name1, 1), (name2, 2), (name1, 3)] 应该返回 [(name1, 1), (name2, 2)]。
【问题讨论】:
假设:
l = [('name1', 1), ('name2', 2), ('name1', 3)]
两个班轮:
s = set()
r = [s.add(i[0]) or i for i in l if i[0] not in s]
结果:
[('name1', 1), ('name2', 2)]
【讨论】:
print(s)而不是print(r),对吧?
简单有效的解决方案:
list_of_tuples = [('name1', 1), ('name2', 2), ('name1', 3)]
output = []
seen_names = set() # just typing {} initializes a dictionary
for tuple in list_of_tuples:
name = tuple[0]
if name not in seen_names:
output.append(tuple)
seen_names.add(name)
print(output)
这将打印所需的输出,[('name1', 1), ('name2', 2)]。
【讨论】:
someList = [('x', 1), ('y', 2), ('x', 3)]
s = set()
for item in someList:
if not any(item[0] in element for element in s):
s.add(item)
你的意思是这样的吗?
【讨论】:
item[0] == element
您可以只使用 group by 模式的修改版本。由于我们只想要第一个值,我们可以使用dict.setdefault。
input_ = [("name1", 1), ("name2", 2), ("name1", 3)]
grouper = {}
for key, value in input_:
grouper.setdefault(key, value)
print(list(grouper.items()))
# [('name1', 1), ('name2', 2)]
【讨论】: