【问题标题】:How to create a dictionary from a txt file that contains different categories?如何从包含不同类别的 txt 文件创建字典?
【发布时间】:2020-03-01 11:41:42
【问题描述】:

如果我有一个 txt 文件:

apple:fruit
banana: fruit
carrot: vegetable
lettuce: vegetable

我怎样才能得到一本字典:

{fruit:[apple, banana], vegetable: [carrot, lettuce]}

提前谢谢你!

【问题讨论】:

    标签: python dictionary text-files


    【解决方案1】:
    file = open("text.txt", "r")
    lines = file.readlines()
    dict = {}
    for line in lines:
        try:
           dict[line.split(":")[1].strip()].append(line.split(":")[0].strip())
        except:
           dict[line.split(":")[1].strip()] = [line.split(":")[0].strip()]
    

    我希望这可以帮助你下次在你对你的问题进行更多研究并自己尝试一些代码之前,这样你就可以了解更多关于编码的知识:))

    【讨论】:

      【解决方案2】:

      尝试使用:

      with open('file.txt', 'r') as f:
          lines = [line.rstrip().split(': ') for line in f]
          print({k: [line[0] for line in lines if line[1] == k] for _, k in lines})
      

      【讨论】:

        【解决方案3】:

        使用集合defaultdict 维护列表。

        from collections import defaultdict
        
        res_dict = defaultdict(list)
        
        with open('file.txt', 'r') as f:
            for line in f:
                value, name = line.rstrip().split(':')
                res_dict[name.strip()].append(value)
        

        【讨论】:

          【解决方案4】:

          创建自己的字典子类相当容易。除了不需要import 之外,使用defaultdict(list) 的另一个优点是它可以像普通字典一样打印。

          class Vividict(dict):
              def __missing__(self, key):
                  value = self[key] = list()
                  return value
          
          
          vividict = Vividict()
          with open('fruits.txt') as file:
              for line in file:
                  name, kind = line.replace(':', ' ').split()
                  vividict[kind].append(name)
          
          from pprint import pprint
          pprint(vividict, width=40)
          

          输出:

          {'fruit': ['apple', 'banana'],
           'vegetable': ['carrot', 'lettuce']}
          

          【讨论】:

            猜你喜欢
            • 2021-07-21
            • 2011-05-05
            • 2020-12-06
            • 1970-01-01
            • 2018-03-12
            • 1970-01-01
            • 1970-01-01
            • 2021-05-10
            • 1970-01-01
            相关资源
            最近更新 更多