搜索列表列表

Ani*_*esh 1 python

我有这样的数据列表

data = [['A',11],['A',22],['B',14],['C',23],['C',31],['B',12]]
Run Code Online (Sandbox Code Playgroud)

我将这些独特的项目放在另一个列表中,如下所示:

search=[]
for item in data:
    if search.count(item[0]) == 0:
        search.append(item[0])

# search contains ['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)

如何使用列表搜索data列表search并生成类似的输出?

['A', [11,22]]
['B', [14,12]]
['C', [23,31]]
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 6

使用字典:

d = {}
for k, v in data:
    d.setdefault(k, []).append(v)
print d
Run Code Online (Sandbox Code Playgroud)

版画

{'A': [11, 22], 'C': [23, 31], 'B': [14, 12]}
Run Code Online (Sandbox Code Playgroud)

您可以获得所有密钥的列表d.keys().

而不是构建列表data,从一开始就使用字典可能会更好.

(其他人defaultdict很快会推荐一个.dict在这种情况下,我更喜欢它,但它并不重要.)

  • 在列表中,如果你有(在你的例子中)`('B',12)`,你必须在结果列表中搜索''B'`,这是一个线性时间操作.使用dict,它的常量时间(代码更清晰,因为这正是dicts的用途). (3认同)

tza*_*man 5

我会用a defaultdict,像这样:

from collections import defaultdict

dd = defaultdict(list)
for key, val in data:
    dd[key].append(val)

# dd.iteritems() will give you your output.
Run Code Online (Sandbox Code Playgroud)