如何在不逐个字母读取的情况下交换键和值?

问题描述 投票:0回答:2

我必须读取一个文本文件并将其设为字典,然后交换这些键和值并将其写回一个新文件,我也无法导入任何内容,我遇到的问题是现在我最终将其转变我的价值观是逐字逐句地表达,而不是文字。

我的文本文件是这样的:

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

解释或解释链接会很有帮助,但我已经用谷歌搜索了很多,所以我不知道是否有人会链接我还没见过的东西,我对这个感到很愚蠢。

python dictionary tuples
2个回答
0
投票

您可以直接将其解析为

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)

0
投票

至少对于第二个错误你需要写

for key, values in prof.items():

© www.soinside.com 2019 - 2024. All rights reserved.