我有一个像这样的数据列表
data = [['A',11],['A',22],['B',14],['C',23],['C',31],['B',12]]
我将这些独特的项目放在另一个列表中:
search=[]
for item in data:
if search.count(item[0]) == 0:
search.append(item[0])
# search contains ['A', 'B', 'C']
如何使用列表data
搜索列表search
并生成类似的输出?
['A', [11,22]]
['B', [14,12]]
['C', [23,31]]
答案 0 :(得分:6)
使用字典:
d = {}
for k, v in data:
d.setdefault(k, []).append(v)
print d
打印
{'A': [11, 22], 'C': [23, 31], 'B': [14, 12]}
您可以使用d.keys()
获取所有密钥的列表。
不是建立列表data
,而是从一开始就使用字典可能会更好。
(其他人会尽快推荐defaultdict
。在这种情况下,我更喜欢dict
,但这并不重要。)
答案 1 :(得分:5)
我会使用defaultdict
,如下所示:
from collections import defaultdict
dd = defaultdict(list)
for key, val in data:
dd[key].append(val)
# dd.iteritems() will give you your output.
答案 2 :(得分:2)
data = [['A',11],['A',22],['B',14],['C',23],['C',31],['B',12]]
d = {}
for k, v in data:
d.setdefault(k, []).append(v)
for item in sorted(d.iteritems()):
print list(item)
打印
['A', [11, 22]]
['B', [14, 12]]
['C', [23, 31]]
但请考虑保留d
字典:
{'A': [11, 22], 'B': [14, 12], 'C': [23, 31]}
它可以让您更轻松地访问这些值。
答案 3 :(得分:1)
您应该使用dict执行此任务(或必要时使用OrderedDict)。请阅读python文档:http://docs.python.org/library/stdtypes.html#mapping-types-dict
答案 4 :(得分:1)
创建一个键值对的字典,其中每个键是数据元组中的第一个元素(您只能在字典中使用唯一键),并且该值是元组中所有项目的列表。键。
map = {}
for item in data:
if map.has_key(item[0]):
map[item[0]].append(item[1])
else:
map[item[0]] = []
map[item[0]].append(item[1])
>>> map
{'A': [11, 22], 'C': [23, 31], 'B': [14, 12]}
答案 5 :(得分:1)
您还可以使用理解:
grouped_data = dict((x[0],list(y[1] for y in data if y[0]==x[0])) for x in data)
请注意,与其他解决方案不同,此解决方案具有二次复杂性,请勿在非常大的列表中使用它。