【问题标题】:Read all lines from a text file to dictionary python将文本文件中的所有行读取到字典 python
【发布时间】:2013-09-28 22:04:04
【问题描述】:

这里我有一个函数,当我阅读时,它只返回最后一行。我做错了什么?

def read():
    with open("text.txt","r") as text:
        return dict(line.strip().split() for line in text)

文本文件很简单,两列

asd 209
asd 441
asd 811
asd 160
asd 158

我想一直读入字典,asd 部分作为键,数字作为值。

【问题讨论】:

  • 有什么问题?有错误吗?您没有获得预期的所有数据吗?
  • 您希望 asd 指向所有相关值的列表吗?如果不是,您应该使用列表而不是字典!
  • 问题是字典需要唯一键,因此我不能有不同值的相同键,我需要为每个值创建一个唯一键。
  • @GivenPie 我知道问题出在哪里。但是,如果键真的很重要而且您可以随意更改它们,那么您根本不应该使用字典,不是吗?
  • @ShashankGupta 我需要字典来提供键值对,还有什么其他简单的解决方案可以给我呢?

标签: python file dictionary


【解决方案1】:

要将值附加到每个字典键的列表中,您可以使用 defaultdict

from collections import defaultdict

def read():
    result = defaultdict(list)
    with open("text.txt","r") as text:
        for line in text:
            key, value = line.strip().split()
            result[key].append(value)
    return result

【讨论】:

    【解决方案2】:

    字典键必须是唯一的。您在该文件中只有 一个 唯一键。

    本质上你是在为同一个键分配不同的值,只有最后一个值是可见的,因为之前的值被覆盖了:

    >>> d = {}
    >>> d['asd'] = 209
    >>> d['asd'] = 441
    >>> d
    {'asd': 441}
    

    要存储 最大 值,请使用:

    def read():
        res = {}
        with open("text.txt","r") as text:
            for line in text:
                key, value = line.split()
                if int(value) > res.get(key, -1):
                    res[key] = int(value)
        return res
    

    【讨论】:

    • 哦……真的。这就说得通了!!那么这是否可以让字典采用 LARGEST 键而不是最后一个键?
    • @GivenPie:循环遍历每一行,并且仅当值高于存储的先前值时才分配给键。
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多