我有以下文字:
我想实现以下目标。
使用键word1,...(左侧的那些)创建一个字典 然后我想将word1与word7相关联,在这种情况下,与word 11相关联(并添加重复),所以
word1 = [word7, word11, word11]
我想对左边的每个单词执行此操作,前提是它与之前已计算的单词不同。
我尝试了以下内容,但它不起作用:
from collections import defaultdict
inputfile = open("file.txt","r")
keys = []
key = ''
my_dict = defaultdict(list)
for line in inputfile:
l=line.split()
a= l[4].split("-")
b_temp = l[7].rstrip("\'")
b = b_temp.split("-")
for elem in range(len(a)):
if a not in keys:
keys.append(a)
key = a[elem]
my_dict[key].append(b[elem])
continue
for var in range(len(a)):
if a[var] == a[elem]:
my_dict[key].append(b[var])
我知道左边的单词数量等于右边的单词数量。
例如,我得到的东西就像defaultdict(,{'aaaa':[“'word7”,'word10']})
但我想
在这种情况下
word1 = [word7,word11,word11]
word2 = [word8,word7]
word3 = [word9]
word4 = [word10]
答案 0 :(得分:0)
我明白了。我相信你的逻辑很好,直到内部for循环(for elem in ...
)。解决方案更简单:您不需要嵌套for循环,只需使用zip
函数将a
中的每个元素(我称之为keys
)与{中的相应元素配对{1}}(我称之为b
):
values
输出:
from collections import defaultdict
inputfile = open("file.txt","r")
my_dict = defaultdict(list)
for line in inputfile:
line = line.split()
keys = line[4].split("-")
values = [v.strip("'") for v in line[7].split("-")]
for k, v in zip(keys, values):
my_dict[k].append(v)
for k, v in sorted(my_dict.items()):
print('{} = {}'.format(k, v))
答案 1 :(得分:0)
如果字符串word
的数量在左侧和右侧相同,那么我认为您可以将re
模块与defaultdict
和zip
一起使用这个例子:
import re
from collections import defaultdict
final = defaultdict(list)
with open('file.txt', 'r') as f:
for k in f:
words = re.findall(r'(word\d+)[- ]', k.strip('\n'))
groupped_words = zip(words[:int(len(words)/2)], words[int(len(words)/2):])
for key, value in groupped_words:
final[key] += [value]
for k, v in sorted(final.items()):
print('{} : {}'.format(k, v))
输出:
word1 : ['word7', 'word11', 'word11']
word2 : ['word8', 'word7']
word3 : ['word9']
word4 : ['word10']