Python字典列表问题

Python字典列表问题,python,list,dictionary,Python,List,Dictionary,我正在尝试配置代码以隔离这两个类别: 期望输出: Tastiest: Limpets and Mussels Most Involved Organism: Mussels 最美味的(食物链中最不同成员食用的食物网成员) 参与最多的生物体(与食物网中数量最多的生物体直接相关的生物体,要么因为它们吃该生物体,要么因为它们被该生物体吃掉。) 我已经为Apex、制作人和灵活食客编写了代码: foodweb = {} with open('AquaticFoodWeb.txt') as input:

我正在尝试配置代码以隔离这两个类别:

期望输出:

Tastiest: Limpets and Mussels
Most Involved Organism: Mussels
最美味的(食物链中最不同成员食用的食物网成员)

参与最多的生物体(与食物网中数量最多的生物体直接相关的生物体,要么因为它们吃该生物体,要么因为它们被该生物体吃掉。)

我已经为Apex、制作人和灵活食客编写了代码:

foodweb = {}

with open('AquaticFoodWeb.txt') as input:
    for line in input:
        animal, prey = line.strip().split(' eats ')
        foodweb.setdefault(animal, []).append(prey)

print ("Predators and Prey:")

for animal, prey in sorted(foodweb.items()):
    if len(prey) > 1:
        print ("{} eats {} and {}".format(animal, ", ".join(prey[:-1]),         prey[-1]))
    else:
        print ("{} eats {}".format(animal, ", ".join(prey)))


print (" ")

#Apex

values = [item.strip() for sub in foodweb.values() for item in sub]
for apex in foodweb.keys():
    if apex.strip() not in values:
        print("Apex Predators: ", apex)


print (" ")       


#Producers
producers = []
allpreys = [item.strip() for sub in foodweb.values() for item in sub]
for p in allpreys:
    if p.strip() not in foodweb.keys() and p not in producers:
        producers.append(p)

print("The Producers Are:")
print(formatList(producers))


#Flexible Eaters

print("Most Flexible Eaters: {}".format(sorted(foodweb.items(), key=lambda x: -len(x[1]))[0][0]))
所以我的问题是,为了让这些配置实现,我是否会编写与我已经编写的代码类似的代码?

以下列表供参考:

Bird eats Prawn
Bird eats Mussels
Bird eats Crab
Bird eats Limpets
Bird eats Whelk
Crab eats Mussels
Crab eats Limpets
Fish eats Prawn
Limpets eats Seaweed
Lobster eats Crab
Lobster eats Mussels
Lobster eats Limpets
Lobster eats Whelk
Mussels eats Phytoplankton
Mussels eats Zooplankton
Prawn eats Zooplankton
Whelk eats Limpets
Whelk eats Mussels
Zooplankton eats Phytoplankton
这似乎有效:

involvement = {}
taste = {}

for animal, prey in foodweb.items():
    involvement[animal] = involvement.get(animal, 0) + len(prey)
    for meal in prey:
        taste[meal] = taste.get(meal, 0) + 1
        involvement[meal] = involvement.get(meal, 0) + 1

by_taste = {}
by_inv = {}

for meal, rank in taste.items():
    by_taste.setdefault(rank, []).append(meal)

for critter, rank in involvement.items():
    by_inv.setdefault(rank, []).append(critter)

tastiest = by_taste[max(by_taste.keys())]
most_involved = by_inv[max(by_inv.keys())]


print 'Tastiest: ', tastiest
print 'Most Involved Organism: ', most_involved
(我将格式留给您。)