gpt4 book ai didi

解析字典时的python KeyError

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:49 25 4
gpt4 key购买 nike

如何加入这两个文本文档?

文档 1:

1000001 10:0.471669 250:0.127552 30:0.218773 64:0.249413
1000002 130:0.0839656 107:0.185613 30:0.446355 110:0.38011
1000003 1:0.0835855 1117:0.0647112 302:0.0851354 46:0.0601825 48:0.098907 516:0.167713

文档 2:

1000001 161:0.115664 207:0.136537 294:0.0974809 301:0.199868
1000002
1000003 555:0.0585849 91:0.0164101

结果:

1000001 10:0.471669 250:0.127552 30:0.218773 64:0.249413 161:0.115664 207:0.136537 294:0.0974809 301:0.199868
1000002 130:0.0839656 107:0.185613 30:0.446355 110:0.38011
1000003 1:0.0835855 1117:0.0647112 302:0.0851354 46:0.0601825 48:0.098907 516:0.167713 555:0.0585849 91:0.0164101

解释:
文档 1文档 2 结构相同,行数也相同。
每行以数字开头(两个文档中的数字相同), 然后我们在每一行中有几个项目,由一个数字+冒号+一个十进制数组成:
example 10:0.471669
这些项目组合是唯一的,我想做的是将它们合并在一起:从第二个文档中取出每一行的项目,并将其放入第一个文档的相应行中。
注意:
开头的初始数字和彼此之间的项目由一个空格分隔。

更新

这是我的尝试:

dat1 = {}
with open('doc1') as f:
for line in f.readlines():
dat1[line.split(' ')[0]] = line.strip().split(' ')[1:]

dat2 = {}
with open('doc2') as f:
for line in f.readlines():
key = line.split(' ')[0]
dat2[key] = line.split(' ')[1:]

for key in dat1.keys():
print("%s %s %s" % (key, str.join(' ', dat1[key]), str.join(' ', dat2[key])))

当该行没有任何要添加到第一个文档时,我在第二个文档的行上得到了 KeyError 的回溯。上例中第二个文档的第二行就是这种情况。
如何逃避这个异常?转义只有键而没有其他要添加的行?

最佳答案

更简单的方法可能是使用 defaultdict列表:

from collections import defaultdict

data = defaultdict(list)

for filename in 'doc1', 'doc2':
with open(filename) as f:
for line in f:
key, _, value = line.partition(' ')
data[key.strip()].append(value.strip())

for key in sorted(data):
print key, ' '.join(data[key]) # Python 2
# print(key, *data[key]) # Python 3

关于您可以添加的结果的打印:

from __future__ import print_function

到你的文件的顶部,然后 Python 3 print() 函数将在 Python 2 中可用,即你可以使用上面的 Python 3 打印。


您在评论中询问了如何打印到文件(导入 print_function 后的 Python 3 或 Python 2):

with open('outfile.txt', 'w') as f:
for key in sorted(data):
print(key, *data[key], file=f)

关于解析字典时的python KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40235376/

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