Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从txt文件Python创建字典_Python_List_Loops_Dictionary_Text Files - Fatal编程技术网

从txt文件Python创建字典

从txt文件Python创建字典,python,list,loops,dictionary,text-files,Python,List,Loops,Dictionary,Text Files,我试图获取一个包含列表的文本文件,获取输入值并以适当的输出格式对其进行排序,但是我很难创建循环并创建此字典 我已经创建了一个空白字典,但我不确定是否应该创建一个类似的字典,以便获得输出: foodweb = { “Bird”: [ Prawn, Mussels, Crab, Limpets, Whelk ], “Crab”: [ Mussels, Limpets ], “Fish”: [ Prawn ],

我试图获取一个包含列表的文本文件,获取输入值并以适当的输出格式对其进行排序,但是我很难创建循环并创建此字典

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

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

setdefault方法set dict[key]=默认值,如果key不在dict中。

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

    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))
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将在字典中创建一个新条目(如果该条目不存在)(确保新条目是一个列表),如果该条目已经存在,try-except将附加到列表中。

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

最后,输出需要仔细考虑,以确保将具有多个猎物的物品添加到输出中。由于字典未排序,您需要在显示结果之前对其进行排序:

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

是的,我们同时发布了答案。我很高兴从你那里得知默认方法!你介意在你的回答中加一点解释吗?我会发现它很有用(我去查阅了文档,但其他人可能会从中受益)。非常感谢!这成功了!然而,我不明白f_的输入,这是为了什么
f_input
只是文件输入句柄。我倾向于使用“f_output”作为我的输出文件句柄名。哦,这现在有道理了!我还以为这比那更复杂,哈哈!马丁,非常感谢你的帮助,我真的很感激!