如何在python中按类别和单词对词典中的多个列表进行分组

2024-05-23 16:28:05 发布

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

我尝试使用itemgetter,但我的代码似乎有问题

from operator import itemgetter

def create_dict(words):
    sorted(words, key = itemgetter category: category['food', 'animal', 'job'])


words = [('food', 'apple'), ('food', 'almond'), ('food', 'apricot'), ('food', 'beancurd'), ('food', 'bacon'),('food', 'bread'), ('food', 'beans'), ('food', 'broccoli'), ('food', 'cake'), ('food', 'chili'), ('animal', 'ape'), ('animal', 'ant'), ('animal', 'bat'), ('animal', 'bear'), ('animal', 'cat'),('animal', 'dog'), ('animal', 'flea'), ('animal', 'horse'), ('animal', 'lamb'), ('animal', 'leopard'),('job', 'baker'), ('job', 'farmer'), ('job', 'builder'), ('job', 'teacher'), ('job', 'pilot'), ('job', 'gardener'), ('job', 'gardener'), ('job', 'secretary'), ('job', 'salesman'), ('job', 'programmer'), ('job', 'manager')]

# *****FINAL RESULTS*****

create_dict(words) == {
'**food** ': {'apricot', 'cake', 'bacon', 'chili', 'almond', 'beancurd', 'apple', 'bread', 'broccoli', 'beans'},
'**animal**': {'dog', 'bat', 'horse', 'leopard', 'bear', 'ape', 'cat', 'flea', 'lamb', 'ant'}, 
'**job**': {'pilot', 'programmer', 'manager', 'gardener', 'farmer', 'teacher', 'builder', 'baker', 'secretary', 'salesman'}}

Tags: applefoodcreatejobdictwordsgardenerbacon
2条回答

您想要的绝对不是排序,而是分组

from operator import itemgetter
from itertools import groupby

words = [('food', 'apple'), ('food', 'almond'), ('food', 'apricot'), ('food', 'beancurd'), ('food', 'bacon'),
         ('food', 'bread'), ('food', 'beans'), ('food', 'broccoli'), ('food', 'cake'), ('food', 'chili'),
         ('animal', 'ape'), ('animal', 'ant'), ('animal', 'bat'), ('animal', 'bear'), ('animal', 'cat'),
         ('animal', 'dog'), ('animal', 'flea'), ('animal', 'horse'), ('animal', 'lamb'), ('animal', 'leopard'),
         ('job', 'baker'), ('job', 'farmer'), ('job', 'builder'), ('job', 'teacher'), ('job', 'pilot'),
         ('job', 'gardener'), ('job', 'gardener'), ('job', 'secretary'), ('job', 'salesman'),
         ('job', 'programmer'), ('job', 'manager')]

key = itemgetter(0)
result = {key: set(x[1] for x in values)
          for key, values in groupby(sorted(words, key=key), key)}
print(result)


{'animal': {'flea', 'dog', 'horse', 'lamb', 'leopard', 'ant', 'bat', 'cat', 'ape', 'bear'}, 
 'food': {'almond', 'broccoli', 'chili', 'cake', 'bread', 'beans', 'beancurd', 'apple', 'bacon', 'apricot'}, 
 'job': {'pilot', 'manager', 'gardener', 'teacher', 'secretary', 'baker', 'programmer', 'salesman', 'farmer', 'builder'}}

您可以通过迭代words列表中的元组并将相关项作为另一个list添加到字典中,以简单的方式完成此操作,而无需itemgetter

输入

def createDict(words):
    outdict = {}
    for i in words:
        if i[0] not in outdict:
            outdict[i[0]] = []
        outdict[i[0]].append(i[1])
    return outdict


words = [('food', 'apple'), ('food', 'almond'), ('food', 'apricot'), ('food', 'beancurd'), ('food', 'bacon'),('food', 'bread'), ('food', 'beans'), ('food', 'broccoli'), ('food', 'cake'), ('food', 'chili'), ('animal', 'ape'), ('animal', 'ant'), ('animal', 'bat'), ('animal', 'bear'), ('animal', 'cat'),('animal', 'dog'), ('animal', 'flea'), ('animal', 'horse'), ('animal', 'lamb'), ('animal', 'leopard'),('job', 'baker'), ('job', 'farmer'), ('job', 'builder'), ('job', 'teacher'), ('job', 'pilot'), ('job', 'gardener'), ('job', 'gardener'), ('job', 'secretary'), ('job', 'salesman'), ('job', 'programmer'), ('job', 'manager')]

outdict = createDict(words)

print(outdict)

输出

{
'food': ['apple', 'almond', 'apricot', 'beancurd', 'bacon', 'bread', 'beans', 'broccoli', 'cake', 'chili'], 
'animal': ['ape', 'ant', 'bat', 'bear', 'cat', 'dog', 'flea', 'horse', 'lamb', 'leopard'], 
'job': ['baker', 'farmer', 'builder', 'teacher', 'pilot', 'gardener', 'gardener', 'secretary', 'salesman', 'programmer', 'manager']
}

相关问题 更多 >