假设我有一个字符串列表列表(stringList):
[['its', 'all', 'ball', 'bearings', 'these', 'days'],
['its', 'all', 'in', 'a', 'days', 'work']]
我还有一组字符串(stringSet)是stringList:
中的唯一字{'its', 'all', 'ball', 'bearings', 'these', 'days', 'in', 'a', 'work'}
使用理解,如果可能的话,我如何获得一个字典,将stringSet中的每个单词映射到包含该单词的stringList索引的字典?在上面的示例中,返回值为:
{'its': {0,1}, 'all':{0,1}, 'ball':{0}, 'bearings':{0}, 'these':{0}, 'days':{0,1}, 'in':{1}, 'a':{1}, 'work':{1}}
我的挂断是如何将索引累积到字典中。我相信对于那些比我更进一步的人来说相对简单。提前谢谢......
答案 0 :(得分:3)
>>> alist = [['its', 'all', 'ball', 'bearings', 'these', 'days'],
... ['its', 'all', 'in', 'a', 'days', 'work']]
>>> aset = {'its', 'all', 'ball', 'bearings', 'these', 'days', 'in', 'a', 'work'}
>>> {x: {alist.index(y) for y in alist if x in y} for x in aset}
{'a': set([1]), 'all': set([0, 1]), 'ball': set([0]), 'these': set([0]), 'bearings': set([0]), 'work': set([1]), 'days': set([0, 1]), 'in': set([1]), 'its': set([0, 1])}
此外,您可以使用enumerate
并使用list作为值将使结果更清晰:
>>> {x: [i for i, y in enumerate(alist) if x in y] for x in aset}
{'a': [1], 'all': [0, 1], 'ball': [0], 'these': [0], 'bearings': [0], 'work': [1], 'days': [0, 1], 'in': [1], 'its': [0, 1]}
答案 1 :(得分:3)
这似乎有效:
str_list = [
['its', 'all', 'ball', 'bearings', 'these', 'days'],
['its', 'all', 'in', 'a', 'days', 'work']
]
str_set = set(word for sublist in str_list for word in sublist)
str_dict = {word: set(lindex
for lindex, sublist in enumerate(str_list) if word in sublist)
for word in str_set}
print (str_dict)
答案 2 :(得分:1)
这是我的代码,与一些嵌套循环一起使用,试图制作一些你会发现易于阅读和理解的东西!
def accumulate(stringList,stringSet):
outputDict = {}
for setItem in stringSet:
outputItem = set()
for i,listItem in enumerate(stringList):
if setItem in listItem:
outputItem.add(i)
outputDict[setItem] = outputItem
return outputDict
stringList = [['its', 'all', 'ball', 'bearings', 'these', 'days'], ['its', 'all', 'in', 'a', 'days', 'work']]
stringSet = {'its', 'all', 'ball', 'bearings', 'these', 'days', 'in', 'a', 'work'}
print(accumulate(stringList,stringSet))
答案 3 :(得分:0)
您可以使用嵌套循环:
result = {}
for w in stringSet:
result[w] = []
for i,l in enumerate(stringList):
if w in l:
result[w].append(i)
它的作用是它遍历stringSet
中的每个单词,并检查它是否在第一个列表中,在第二个列表中等,并相应地更新字典。