我在想出可以实现我想要的功能的代码时遇到麻烦。
我有一个使用此结构的词典列表:
word = {'word': 'Dog', 'loc': 160}
它们被添加到for循环的列表中:
words = []
for line in lines:
word = {'word': line['WordText'], 'loc': line['Location']}
...
words.append(word)
每行都有一个location
整数,稍后我需要将文本与该行配对。
我需要在列表中找到键loc
的值匹配的所有实例,然后以某种方式将它们配对。
(Python)伪代码:
new_lines = []
for word in words:
new_line = {'line': '', 'loc': 0}
if a_word['loc'] == another_word['loc']:
new_line['line'] = a_word['word'] + another_word['word']
new_line['loc'] = a_word['loc']
new_lines.append(new_line)
我知道这不是正确的方法,但是我需要某种if any word['loc'] matches any other word['loc']: then put into list
这种东西。
如果不清楚,我想在 loc 值匹配的字典中配对单词。
答案 0 :(得分:1)
您可以建立一个词典,其中每个位置都收集单词列表。然后过滤掉只有一个单词的位置。
from collections import defaultdict
lines = [{'WordText': 'dog', 'Location': 11},
{'WordText': 'cow', 'Location': 222},
{'WordText': 'cat', 'Location': 11},
{'WordText': 'horse', 'Location': 222},
{'WordText': 'duck', 'Location': 55},
{'WordText': 'goat', 'Location': 222}]
wordsAtLoc = defaultdict(set)
for line in lines:
wordsAtLoc[line['Location']].add(line['WordText'])
matches = { loc:list(words) for loc,words in wordsAtLoc.items() if len(words)>1 }
print(matches)
# {11: ['cat', 'dog'], 222: ['goat', 'horse', 'cow']}
答案 1 :(得分:0)
我需要在列表中找到键loc值匹配的所有实例,然后以某种方式将它们配对。
使用默认字典将单词按“ loc”分组。
您可以用它遍历“ d”并做您想做的事。
from collections import defaultdict
d = defaultdict(list)
words = [{'word': 'fog', 'loc': 12}, {'word': 'bird', 'loc': 122}, {'word': 'bag', 'loc': 12},
{'word': 'main', 'loc': 33}]
for word in words:
d[word['loc']].append(word['word'])
print(d)
输出
defaultdict(<class 'list'>, {12: ['fog', 'bag'], 122: ['bird'], 33: ['main']})