【问题标题】:How to create a dictionary from a comma-separated values?如何从逗号分隔值创建字典?
【发布时间】:2020-04-18 03:10:25
【问题描述】:

我需要从包含逗号分隔值的文本文件中创建一个字典。
到目前为止,我写了这么多。

import csv
pick = open('a.txt','r')
read = csv.reader(pick)
reviews = {}

文本文件中的示例数据如下所示

Peter,Gravity,4.5,For a Few Dollars More,1.0,Prometheus,4.0
Jack Holmes,Lawrence of Arabia,3.0,Gravity,3.5,The Godfather,1.5,Prometheus,5.0,The Guns of Navarone,3.0

我想创建一个应该像这样的字典

{'Peter': {'Gravity': 4.5,
          'For a Few Dollars More': 1.0,
          'Prometheus': 4.0},

'Jack Holmes': {'Lawrence of Arabia': 3.0,
                'Gravity': 3.5,
                'The Godfather': 1.5,
                'Prometheus': 5.0,
                'The Guns of Navarone': 3.0,}
}

我查看了这些页面:this this this this 但没有帮助回答我的问题。
你能给我一些关于如何完成这个的提示或想法吗?

【问题讨论】:


  • 会出现在每一行的末尾吗?
  • @SubbuVidyaSekar,
    是一个错字。不,每行末尾不会有
  • 在每一行的末尾,是否有可能输入按键或连续行?
  • @SubbuVidyaSekar,连续线。由于必须读取文件,因此需要按键。

标签: python-3.x


【解决方案1】:

此解决方案使用zip 对内部字典的键和值进行配对。

d = {}

with open('a.txt') as f:
    for line in csv.reader(f):
        it = iter(line)
        key = next(it)
        d[key] = dict(zip(it, it))

如果您需要 float 值,您可以执行类似的操作

d[key] = dict((a, float(b)) for a, b in zip(it, it))

【讨论】:

  • 更改为 key = next(it) 这是一个错字
  • @Patrick Haugh,您的解决方案有效。这就是我想要的。谢谢!顺便说一句,请编辑部分键 = next(it)。
  • @007mrviper:验证您的结果。还有一些工作。整个列表将作为键的值
  • @SubbuVidyaSekar 我已经做到了。所以我接受了他的回答。
  • {'Peter': {'Gravity': '4.5', 'For a few Dollars More': '1.0', 'Prometheus': '4.0', 'Jack Holmes': 'Lawrence of Arabia', '3.0': 'Gravity', '3.5': 'The Godfather', '1.5': 'Prometheus', '5.0': 'The Guns of Navarone'}} 这就是你可能得到的结果..
【解决方案2】:

这是一个不太好但简单的解决方案:

import csv

mydict = {}
with open('file.csv', mode='r') as infile:
    reader = csv.reader(infile)
    mylist = list(reader)
    for i in range(len(mylist)):
        z = iter(mylist[i][1:])
        mydict[mylist[i][0]] = dict(zip(z, z))

print(mydict)

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多