[英]Printing list items by group in python
我还是 Python 的新手。 我有与以下列表类似的列表:
items = [[4, 'A'], [4, 'B'], [5, 'C'], [5, 'D'], [5, 'E'], [6, 'F'], [6, 'G']]
我试图通过将第一个项目组合在一起来打印它并得到如下内容:
4 : ['A', 'B']
5 : ['C', 'D', 'E']
6 : ['F', 'G']
我该怎么做呢?
output = {}
items = [[4, 'A'], [4, 'B'], [5, 'C'], [5, 'D'], [5, 'E'], [6, 'F'], [6, 'G']]
for number, letter in items:
if number not in output:
output[number] = []
output[number].append(letter)
print('\n'.join(f'{number} : {letters}' for number, letters in output.items()))
Output
4 : ['A', 'B']
5 : ['C', 'D', 'E']
6 : ['F', 'G']
解释
items
而不是list
以免与 stdlib list
冲突。 * 我建议使用collections.defaultdict
来简化您的代码。
这是一个简单的解决方案(但对于大列表来说很慢),不需要任何外部 package:
res = {}
for k,v in items:
res[k] = res.get(k, []) + [v]
print('\n'.join(f'{k} : {res[k]}' for k in res))
您可以使用itertools.groupby
和operator.itemgetter
:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> list_ = [[4, 'A'], [4, 'B'], [5, 'C'], [5, 'D'], [5, 'E'], [6, 'F'], [6, 'G']]
>>> print(*(f'{k}: {sum(list(g), [])}'
for k, g in groupby(list_, key=lambda x: list.pop(x, 0))),
sep='\n')
4: ['A', 'B']
5: ['C', 'D', 'E']
6: ['F', 'G']
如果您想在不导入任何内容的情况下执行此操作:
>>> list_ = [[4, 'A'], [4, 'B'], [5, 'C'], [5, 'D'], [5, 'E'], [6, 'F'], [6, 'G']]
>>> table = {}
>>> for key, value in list_:
table.setdefault(key, []).append(value)
>>> table
{4: ['A', 'B'], 5: ['C', 'D', 'E'], 6: ['F', 'G']}
>>> for key, group in table.items():
print(f'{key}: {group}')
4: ['A', 'B']
5: ['C', 'D', 'E']
6: ['F', 'G']
您可以为此使用字典方法setdefault
。 它是这样工作的:
如果键在字典中,则返回其值。 如果不是,则插入值为默认值的键(在这种情况下为空list
)并返回默认值( list
)。
result = {}
for item in items:
result.setdefault(item[0], []).append(item[1])
print(result)
Output:
{4: ['A', 'B'], 5: ['C', 'D', 'E'], 6: ['F', 'G']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.