基于criteri的Python分组Concat行

2024-06-06 13:43:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python初学者。我需要做一个组连接。我尝试了不同的方法,但没有最终的结果。在

我有一个数据集:

A   Apple  
A   Orange  
A   Peach  
B   Apricot  
C   Banana  
B   Cherry  
C   Blueberry

我需要按以下格式分组

^{pr2}$

有什么想法吗。非常感谢你的帮助。在


Tags: 数据方法apple格式bananacherrypeachorange
2条回答

下面是一个使用^{}的解决方案:

from collections import defaultdict

with open('input') as f:
    d = defaultdict(list)
    for key, word in (line.split() for line in f):
        d[key].append(word)

    for k in sorted(d):
        print('{} {}'.format(k, ', '.join(sorted(d[k]))))

输出

^{pr2}$

defaultdict使将项收集到列表中比管理标准字典容易得多,因为在添加之前不需要检查字典中是否已经有一个键。在

另一个选择是使用^{},但这要求数据按顺序排列,因此需要在使用之前对文件进行排序。在

我相信这能解决你的问题:

with open('list.txt', 'r') as f:
    file = f.read()
    f.close()
    words = {}
    for line in file.split('\n'):
        letter, word = line.split(' ')
        try:
            words[letter] = words[letter] + [word]
        except KeyError:
            words.update({letter: [word]})

# id = 'A' or 'B' Etc.
for id, word in sorted(words.items()):
    print('{0} {1}'.format(id, word))

输出:

^{pr2}$

它在做什么:

  1. 打开.txt文件并读取它。一旦完成它关闭它。在
  2. 将文件拆分为每一行,并在每行上迭代。在
  3. 将行拆分为每个字母和单词。然后将这些值放入letterword。在
  4. 尝试在words中的字母键处添加word的值列表。在
  5. 如果失败(键不存在),它会将其作为新的键和值添加。在
  6. 循环每一个并打印出漂亮的:)

相关问题 更多 >