【问题标题】:How to use Python Methods and Instances to store data in a dictionary from a file?如何使用 Python 方法和实例将文件中的数据存储在字典中?
【发布时间】:2017-10-07 20:20:42
【问题描述】:

我是 python 新手,不太喜欢面向对象的编程。我正在尝试找出实现以下目标的最佳方法:

我想读取这样的文件: 从文件输入:

Name,semester,point
abc,5,3.5
cba,2,3.5

我想将它存储在字典中,例如作为主键的名称和与之相关的其他两个值。 如,

输出可能:

abc:'5','3.5'

我需要将我的存储值用于其他函数中的一些计算。因此,只要我存储它们并且可以以某种方式访问​​它们就可以了。它可以是列表、数组列表、字典或任何看起来不错的解决方案。

根据我的阅读,我想使用方法和实例而不是类和对象。我认为根据我的理解,这听起来是正确的。

请提出实现这一目标的最佳方法,因为我已经检查过 stackoverflow 是否有类似问题,并且我只找到了面向对象的解决方案(我想避免)。

【问题讨论】:

  • 你已经说了你应该怎么做,把它们存进字典里,我建议你读一些字典的教程来了解如何使用它们。
  • 使用 csv.DictReader。它将给出一个现成的字典。我不会为此烦恼对象。让对象包装字典尤其没有意义。
  • @Arman 你能推荐一些解释如何使用方法和实例的教程吗?我遇到的一切都是面向对象的,我现在还没有准备好。
  • 网络上有成千上万的python教程,例如learnpythoncodeacademy
  • @PaulRooney 我确实使用 csv.DictReader 来读取文件。效果很好。我还设法将它存储在字典中。但是当我尝试打印输出时我得到了对象,所以我假设我的代码有一些对象混合,因为我对如何使用方法的理解不太清楚。谁能给我一个简单清晰的例子,说明我想用 INPUT 和 OUTPUT 实现什么?

标签: python list dictionary methods instances


【解决方案1】:

我认为你不需要为此创建一个类,因为结果可以在一行中实现:

Python3解决方案:

data = {a:b for a, *b in [i.strip('\n').split(',') for i in open('filename.txt')][1:]}

Python2解决方案:

data = {a[0]:a[1:] for a in [i.strip('\n').split(',') for i in open('filename.txt')][1:]}

但是,如果您正在寻找 OO 解决方案:

class Data:
    def __init__(self, filename):
        self.data = {} #will store data in empty dictionary
        self.filename = filename
    def set_data(self):
        for i in self.get_data():
            self.data[i[0]] = i[1:]
    def get_data(self):
        return [i.strip('\n').split(',') for i in open(filename)]
file_data = Data("the_file.txt")
file_data.set_data()
print(file_data.data) #will print the full dictionary

【讨论】:

  • 我不确定,但您不需要关闭文件吗?也许使用with?而且我认为用line 替换i 会更具可读性。不过答案很好。
  • @Neo with 可以使用;但是,open 默认情况下会自动关闭文件,如果它只是为了阅读而打开的。
【解决方案2】:

我使用了上面@Ajax1234 的例子。似乎是一个很好的解决方案和示例。

据我了解,混淆在于实例和类之间以及它们与方法的关系

方法:

  • 作为属性附加到类的函数是方法。

类:

  • 它们充当实例创建者工厂。
  • 它们的属性提供 = 行为数据和函数
  • 这些属性由从这些类生成的实例继承。

实例:

  • 这些代表程序域中的具体项目。
  • 他们从他们的类继承他们的属性
  • 它们的属性记录因对象而异的数据。
  • 内存中一次只能有一个给定方法的实例。

例如在数据处理模型中:程序和记录

  • 实例就像记录
  • 类就像处理这些数据记录的软件

类、方法和实例用示例解释:

如果我解释有误,请纠正我。

    import sys


    filename = sys.argv[1]

    class Data: # class
        def __init__(self, filename):
            self.data = {} #will store data in empty dictionary
            self.filename = filename

         # funtion in class as attribute can be a METHOD
         def get_data(self): 
            return [i.strip('\n').split(',') for i in open(filename)]

        # funtion in class as attribute can be a METHOD
        def set_data(self):
            for i in self.get_data():
                self.data[i[0]] = i[1:]

    # Instances are derived from Class
    # file_data is an Instance created from the class Data
    file_data = Data(filename)

    # method called through Instance
    file_data.set_data()

    # will print the full dictionary
    print(file_data.data)

参考:Mark Lutz 的《学习 Python》

希望这能解释清楚。

【讨论】:

    【解决方案3】:

    单线解决方案:

    print({tuple(i[:1]):i[1:] for i in [i.strip().split(',') for i in open('g.txt')][1:]})
    
    Detailed solution:
    

    final_dict={}

    with open("g.txt") as f:
        for i in [i.strip().split(',') for i in f][1:]:
    
                final_dict[tuple(i[:1])]=i[1:]
    
    print(final_dict)
    

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多