gpt4 book ai didi

python - 使用 Python 进行分组和复选标记

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:24 25 4
gpt4 key购买 nike

我有几个文件,每个文件都有这样的数据(文件名:内部数据以换行符分隔):

  1. 迈克:飞机\n汽车
  2. 宝拉:飞机\n火车\n船\n汽车
  3. 比尔:船\n火车
  4. 斯科特:汽车

如何使用 python 创建一个 csv 文件,将所有不同的车辆分组,然后在适用的人员上打上 X,例如:

output

最佳答案

假设这些行号不在那里(如果有的话很容易修复),并且输入文件如下:

Mike: Plane
Car
Paula: Plane
Train
Boat
Car
Bill: Boat
Train
Scott: Car

可以在这里找到解决方案:https://gist.github.com/999481

import sys
from collections import defaultdict
import csv

# see http://stackoverflow.com/questions/6180609/group-and-check-mark-using-python
def main():
# files = ["group.txt"]
files = sys.argv[1:]
if len(files) < 1:
print "usage: ./python_checkmark.py file1 [file2 ... filen]"

name_map = defaultdict(set)

for f in files:
file_handle = open(f, "r")
process_file(file_handle, name_map)
file_handle.close()

print_csv(sys.stdout, name_map)

def process_file(input_file, name_map):
cur_name = ""
for line in input_file:
if ":" in line:
cur_name, item = [x.strip() for x in line.split(":")]
else:
item = line.strip()
name_map[cur_name].add(item)


def print_csv(output_file, name_map):
names = name_map.keys()
items = set([])
for item_set in name_map.values():
items = items.union(item_set)

writer = csv.writer(output_file, quoting=csv.QUOTE_MINIMAL)
writer.writerow( [""] + names )
for item in sorted(items):
row_contents = map(lambda name:"X" if item in name_map[name] else "", names)
row = [item] + row_contents
writer.writerow( row )


if __name__ == '__main__':
main()

输出:

,Mike,Bill,Scott,Paula 
Boat,,X,,X
Car,X,,X,X
Plane,X,,,X
Train,,X,,X

这个脚本唯一不做的就是保持列的顺序与名称所在的顺序一致。可以保留一个单独的列表来维护顺序,因为 map /字典本质上是无序的。

关于python - 使用 Python 进行分组和复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6180609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com