我必须读取一个文本文件并将其设为字典,然后交换这些键和值并将其写回一个新文件,我也无法导入任何内容,我遇到的问题是现在我最终将其转变我的价值观是逐字逐句地表达,而不是文字。
我的文本文件是这样的:
Cloth:Stitching
Leather:Stitching,
Blacksmith:Molding
Pottery:Shaping
Metalworking:Molding
Baking:Heating
这是一场斗争,因为我不知道为什么,但列表、字典和元组是我的头脑无法理解的东西。
我尝试用两种方式编写代码
第一:
with open('trial.txt', 'r') as f:
fr = f.readlines()
prof = {}
for line in fr:
key , value=line.strip().split(":")
prof[key]=value
profr = {}
for key, values in prof.items():
for value in values:
if value in profr:
profr[value].append(key)
else:
profr[value]=[key]
输出:
{',': ['Leather'],
'H': ['Baking'],
'M': ['Blacksmith', 'Metalworking'],
'S': ['Cloth', 'Leather', 'Pottery'],
'a': ['Pottery', 'Baking'],
'c': ['Cloth', 'Leather'],
'd': ['Blacksmith', 'Metalworking'],
'e': ['Baking'],
'g': ['Cloth', 'Leather', 'Blacksmith', 'Pottery', 'Metalworking', 'Baking'],
'h': ['Cloth', 'Leather', 'Pottery'],
'i': ['Cloth',
'Cloth',
'Leather',
'Leather',
'Blacksmith',
'Pottery',
'Metalworking',
'Baking'],
'l': ['Blacksmith', 'Metalworking'],
'n': ['Cloth', 'Leather', 'Blacksmith', 'Pottery', 'Metalworking', 'Baking'],
'o': ['Blacksmith', 'Metalworking'],
'p': ['Pottery'],
't': ['Cloth', 'Cloth', 'Leather', 'Leather', 'Baking']}
第二次尝试只是删除 .items() 以类似于我的旧代码,但该代码没有读取文本文件:
with open('trial.txt', 'r') as f:
fr = f.readlines()
prof = {}
for line in fr:
key , value=line.strip().split(":")
prof[key]=value
profr = {}
for key, values in prof:
for value in values:
if value in profr:
profr[value].append(key)
else:
profr[value]=[key]
输出:
*** Remote Interpreter Reinitialized ***
Traceback (most recent call last):
File "D:\code\Scripts\Menu.py", line 8, in <module>
for key, values in prof:
^^^^^^^^^^^
ValueError: too many values to unpack (expected 2)
我需要做什么才能获得所需的输出:
Stitching: Cloth, Leather
Molding: Blacksmith, Metalworking
Shaping:Pottery
Heating:Baking
解释或解释链接会很有帮助,但我已经用谷歌搜索了很多,所以我不知道是否有人会链接我还没见过的东西,我对这个感到很愚蠢。
您可以直接将其解析为
defaultdict
,其中list
作为默认值工厂。
from collections import defaultdict
profr = defaultdict(list)
with open('trial.txt', 'r') as f:
for line in f:
v, k = line.strip().split(':')
profr[k].append(v)
至少对于第二个错误你需要写
for key, values in prof.items():