从多个列表创建词典

2024-09-30 10:34:17 发布

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

我试图根据列表中单词的索引从多个列表中创建词典。它们的键是单词本身,键是单词的索引 在列表中。如果单词出现两次,则值类似于[position1,position2]。 在下面的示例中。第二个列表有两个,所以“the”将是“the”:[2,6] 等等

def create_myDict(mylists):       
    myDic = {}
    for t in mylists:
        myDic[t[0]] = t[:]
    return myDic 

样本输入:

^{pr2}$

预期输出:

myDic ={ 'what':[0], 'did':[1], 'the':[2,6],
'book':[3],'say':[4],'to':[5],'page':[7],'don':[8]
.....
}

但它不起作用。有什么想法吗。在


Tags: thein示例列表forreturndefcreate
3条回答

我想这能满足你的需要。每个单词的列表长度相同,并且将包含None或每个相应列表的索引列表:

import collections

def create_myDict(*lists):
    """ Map words to their index positions in each of the lists. """
    # initialize results
    unique_words = {word for words in lists for word in words}
    results = {word: [[] for _ in xrange(len(lists))] for word in unique_words}

    for list_num, words in enumerate(lists):
        indices = collections.defaultdict(list)
        for index, word in enumerate(words):
            indices[word].append(index)
        for word in indices:
            results[word][list_num] = indices[word]

    # return results with empty lists converted to None
    return {word: [None if not index else index for index in indicies]
                for word, indicies in results.iteritems()}

list1 = ['why', 'did', 'the', 'dalmation', 'need', 'glasses', 'he', 'was',
         'seeing', 'spots']
list2 = ['what', 'did', 'the', 'book', 'say', 'to', 'the', 'page', 'don\'t',
         'turn', 'away', 'from', 'me']

print 'create_myDict(list1, list2) = {'
for item in sorted(create_myDict(list1, list2).items()):
    print '    {!r}: {},'.format(*item)
print '}'

示例列表的输出:

^{pr2}$

更新

如果您的输入是列表列表,如您在评论中所述,只需执行以下操作:

myinput = [['what', 'did'], ['why', 'did', 'the', 'strawberry']]

print 'create_myDict(*myinput) = {'
for item in sorted(create_myDict(*myinput).items()):
    print '    {!r}: {},'.format(*item)
print '}'

输出:

create_myDict(*myinput) = {
    'did': [[1], [1]],
    'strawberry': [None, [3]],
    'the': [None, [2]],
    'what': [[0], None],
    'why': [None, [0]],
}

也许吧

my_word_list = ['why', 'did', 'the', 'dalmation', 'need', 'glasses', 'he', 'was', 'seeing', 'spots']
order_occurance = dict(zip(my_word_list,xrange(1000000000)))

from collections import Counter
count_occurance = Counter(my_word_list)

此函数将创建一个字典,其中单词作为关键字,其索引列表作为值:

def create_myDict(mylists):
    myDict = {}
    for sublist in mylists: 
        for i in range(len(sublist)):
            if sublist[i] in myDict:
               myDict[sublist[i]].append(i)
            else:
               myDict[sublist[i]] = [i]

    return myDict

同样的,用setdefault稍微短一点:

^{pr2}$

如果您根本不想费心检查密钥是否存在,还有collections.defaultdict

from collections import defaultdict

def create_myDict(mylists):
    myDict = defaultdict(list)
    for sublist in mylists: 
        for i in range(len(sublist)):
            myDict[sublist[i]].append(i)
    return myDict

相关问题 更多 >

    热门问题