将字符串行转换为字典

2024-06-02 05:45:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个初始代码:

record = "Jane,Doe,25/02/2002;
          James,Poe,19/03/1998;
          Max,Soe,16/12/2001
          ..."

我需要把它编入字典,它的输出应该是这样的:

{'First name': 'Jane', 'Last name': 'Doe', 'Birthday': '25/02/2002'}
{'First name': 'James', 'Last name': 'Poe', 'Birthday': '19/03/1998'}
...

每行应该有一个从1开始的递增键

我目前还不知道如何处理这个问题,因为我还是一个没有经验的学生

我见过有人用它来表示包含键值对的字符串,但我的字符串不包含这些键值对:

mydict = dict((k.strip(), v.strip()) for k,v in 
              (item.split('-') for item in record.split(',')))

Tags: 字符串nameinforrecorditem键值first
3条回答

要为一行生成所需的字典,可以使用split在有逗号(',')的行上切分,以获取字典的值,并对键进行硬编码。例如

line   = "Jane,Doe,25/02/2002"
values = line.split(",")
d = {"First Name": values[0], "Last Name": values[1], "Birthday": values[2]}

现在要重复记录中的每一行,需要一个所有行的列表。同样,在本例中,您可以使用split在有分号(“;”)的地方切碎输入。例如

record = "Jane,Doe,25/02/2002;James,Poe,19/03/1998;Max,Soe,16/12/2001"
lines = record.split(";")

现在,您可以在这个lines列表上迭代一行的解决方案,将结果收集到另一个列表中

results = []
for line in lines:
  values = line.split(",")
  results.append({"First Name": values[0], "Last Name": values[1], "Birthday": values[2]})

您提到的增量键要求似乎很奇怪,因为您可以将它们保存在一个列表中,其中列表中的索引实际上就是键。但是,当然,如果你真的需要索引字典的东西,你可以使用字典理解来做到这一点

results = {i + 1: results[i] for i in range(len(results))}

最后,通过使用列表和字典理解的组合,以及预期键的列表,整个过程可能会变得更简洁(在我看来也更好)

record  = "Jane,Doe,25/02/2002;James,Poe,19/03/1998;Max,Soe,16/12/2001"
keys    = ["First Name", "Last Name", "Birthday"]
results = [dict(zip(keys, line.split(","))) for line in record.split(";")]

使用可选的索引字典:

results = {i + 1: results[i] for i in range(len(results))}

这应该适用于您的情况:

lines = [line.replace('\n','').replace('.','').strip() for line in record.split(';')]
desired_dict = {}
for i, line in enumerate(lines):
  words = line.split(',')
  desired_dict[i] = {
      'First name':words[0],
      'Last name':words[1],
      'Birthday':words[2]
  }

使用^{}

In [220]: ans = []

In [221]: record = "Jane,Doe,25/02/2002;James,Poe,19/03/1998;Max,Soe,16/12/2001"
In [223]: l = record.split(';')

In [227]: for i in l:
     ...:     l1 = i.split(',')
     ...:     d = {'First Name': l1[0], 'Last Name': l1[1], 'Birthday': l1[2]}
     ...:     ans.append(d)
     ...: 

In [228]: ans
Out[228]: 
[{'First Name': 'Jane', 'Last Name': 'Doe', 'Birthday': '25/02/2002'},
 {'First Name': 'James', 'Last Name': 'Poe', 'Birthday': '19/03/1998'},
 {'First Name': 'Max', 'Last Name': 'Soe', 'Birthday': '16/12/2001'}]

相关问题 更多 >