从 txt 文件创建字典 Python

Creating a dictionary from txt file 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
  ]
}

我怎样才能写一个循环来使这个更简单?!?

file_content = open('AquaticFoodWeb.txt' , 'r')
aquaticfoodweb ={}
for line in file_content:
    myList=line.rstrip('\n').split(" eats ")

这是来自 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

像这样:

    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 if key is not already in dict.

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

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))

这将为您提供以下输出:

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

你可以使用正则表达式吗?如果文件不大可能适合

import re

with open('AquaticFoodWeb.txt' , 'r') as f:
   content = f.read()

foodweb = re.findall('(\"(.*?)\").*?\[(.*?)\]') 

for item in foodweb:
   idx = item[1].rfind(", ")
   print "%s eats %s" % (item[0],item[1][0:idx]+item[1][idx:].replace(", ", " and "))