如何在Python中使用管道分隔符将值添加到同一键

2024-05-16 10:16:10 发布

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

我正在读一个文本文件,我将它转换成数组(键,对)。如果我有和管道分隔符相同的键,我想附加这些值。我是python新手,有人能帮我解决这个问题吗。请查找我的代码和输入输出格式:

文件输入:(测试.txt)你知道吗

1234567 E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017
83738383 E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017
1234567 E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017

Python代码:

import sys

with open('test.txt') as f:
  result = dict(line.split(' ', 1) for line in f)
  for line in list:
    if line[0] in result:
        result[line[0]].append(line[1])
    else:
        result[line[0]] = [line[1]]

我想打印我的密钥和值,如下所示:

Key: 1234567.AB.K
Value: E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017|E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017|

Key: 83738383.AB.K
Value: E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017|

如果同一个键出现多个值,则使用管道分隔符来区分第一个记录、第二个记录等。你知道吗

我将得到大约200万的参赛者测试.txt文件。你知道吗

我在python中处理这个问题的效率有多高。我的python脚本没有按预期工作,如果我尝试为同一个键附加值,它会破坏代码。你知道吗

非常感谢您的帮助! 提前谢谢。你知道吗


Tags: 文件代码intxt管道lineresultpo
1条回答
网友
1楼 · 发布于 2024-05-16 10:16:10

我不确定你在list循环中的for。你知道吗

当您尝试为同一个键追加值时,代码中断的原因是您创建了result作为字典,每个值都是一个字符串。你知道吗

您需要的是为最终结果创建一个result_dict,类似这样

result_dict = {}

with open('test.txt') as f:
  lines = list(line.split(' ', 1) for line in f)
  for line in lines:
    if line[0] in result_dict:
        result_dict[line[0]].append(line[1].strip())
    else:
        result_dict[line[0]] = [line[1].strip()]

print(result_dict)

将打印

{'1234567.AB.K': ['E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017', 'E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017'], '83738383.AB.K': ['E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017']}

相关问题 更多 >