从txt文件Python创建字典

2024-09-29 00:21:16 发布

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

我试图获取一个包含列表的文本文件,获取输入值并以适当的输出格式对它们进行排序,但是我在创建循环和创建字典时遇到了困难。在

我已经创建了一个空白字典,但是我不确定是否应该创建一个类似这样的字典来获得输出:

foodweb =
{
  “Bird”: [
    Prawn,
    Mussels,
    Crab,
    Limpets,
    Whelk
  ],
  “Crab”: [
    Mussels,
    Limpets
  ],
  “Fish”: [
    Prawn
  ],
  “Limpets”: [
    Seaweed
  ],
  “Lobster”: [
    Crab,
    Mussels,
    Limpets,
    Whelk
  ],
  “Mussels”: [
    Phytoplankton,
    Zooplankton
  ],
  “Prawn”: [
    Zooplankton
  ],
  “Whelk”: [
    Limpets,
    Mussels
  ],
  “Zooplankton”: [
    Phytoplankton
  ]
}

我怎么能写一个循环使它更简单?!?在

^{pr2}$

这是txt文件中的列表

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

这是我想要的输出格式:

Predators and Prey:
Bird eats Prawn, Mussels, Crab, Limpets and Whelk
Crab eats Mussels and Limpets
Fish eats Prawn
Limpets eats Seaweed
Lobster eats Crab, Mussels, Limpets and Whelk
Mussels eats Phytoplankton and Zooplankton
Prawn eats Zooplankton
Whelk eats Limpets and Mussels
Zooplankton eats Phytoplankton

Tags: and列表字典fishcrabbirdeatsprawn
3条回答

我不确定你是要文本输出还是要字典。您可以这样创建词典:

file_content = open('AquaticFoodWeb.txt' , 'r')
aquaticfoodweb ={}
for line in file_content:
    myList=line.rstrip('\n').split(" eats ")
    try:
        aquaticfoodweb[myList[0]].append(myList[1])
    except KeyError:
        aquaticfoodweb[myList[0]]=[myList[1]]

try except将在字典中创建一个不存在的新条目(确保新条目是一个列表),如果条目已经存在,它将追加到列表中。在

希望下面的内容能有所帮助。你需要从一本空字典开始。对于输入的每一行,正确地将输入的两部分分开。然后可以使用这些创建字典条目。词典中的每个条目都是一个列表。setdefault用于在发现新动物时创建一个空列表,然后自动将猎物追加到该列表中。在

最后,输出需要一点思考,以确保有多个猎物的物品在输出中添加了and。由于词典没有排序,因此需要在显示结果之前对其进行排序:

foodweb = {}

with open('AquaticFoodWeb.txt') as f_input:
    for line in f_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))

这将为您提供以下输出:

^{pr2}$

像这样:

    file_content = open('AquaticFoodWeb.txt' , 'r')
    aquaticfoodweb ={}
    for line in file_content.readlines():
        aquaticfoodweb.setdefault(line.split()[0], []).append(line.split()[-1])
    file_content.close()
    for key, value in aquaticfoodweb.items():
        if len(value) > 1:
            value = value[:-2] + [" and ".join(value[-2:])]
        print "{} eats {}".format(key, ",".join(value))

setdefault方法set dict[key]=default如果key不在dict中

相关问题 更多 >