如果子列表的第一个元素在 Python 中是唯一的,则从第一个子列表中获取前两项

Lal*_*lit 4 python for-loop list-comprehension list python-3.x

我有一个清单:

df = [['apple', 'red', '0.2'], ['apple', 'green', '8.9'], ['apple', 'brown', '2.9'], 
      ['guava', 'green', '1.9'], ['guava', 'yellow', '4.9'], ['guava', 'light green', '2.3']]
Run Code Online (Sandbox Code Playgroud)

从这里开始,鉴于第一个子列表的值是唯一的,我只想从第一个不同的子列表中获取前 2 个项目。

预期输出:

df = [['apple', 'red'], ['guava', 'green']]
Run Code Online (Sandbox Code Playgroud)

代码到现在:

dummy_list = []

for item in df:
    if item[0] not in dummy_list:        
        dummy_list.append(item[:2])
Run Code Online (Sandbox Code Playgroud)

这不起作用并附加所有元素。请对此提供任何帮助

azr*_*zro 5

或者更聪明:使用字典并setdefault只为第一个添加映射

result = {}
for value in df:
    result.setdefault(value[0], value[:2])
result = list(result.values())

print(result)
Run Code Online (Sandbox Code Playgroud)

或者您可以记录添加的键的数量以避免重复它们(在单独的列表中)

keys = set()
result = []
for value in df:
    if value[0] not in keys:
        result.append(value[:2])
        keys.add(value[0])

print(result) # [['apple', 'red'], ['guava', 'green']]
Run Code Online (Sandbox Code Playgroud)