繁体   English   中英

如何从python中的正则表达式创建嵌套字典?

[英]How can I create a nested dictionary from a regex in python?

我创建了一个正则表达式来搜索文本块并提取出两件事。 我的目标是创建一个包含以下信息的 CSV(或 Excel 文件):

  1. 一组 4 位代码
  2. 匹配的法术效果集。

我创建了我的正则表达式,我已经测试过它并成功地将我需要的所有相关信息提取到一个巨大的文本块中。 我最初试图通过迭代来创建一个字典,如下所示:

WildMagic = {0000: "Target's head turns into a watermelon", 0001: "Target's head turns into a cucumber",...Number: "Effect Text"}

但是,当我将其写入 CSV 时,我得到了两行很长的行,其中一行包含所有 4 位代码,另一行包含所有效果。 我可以在 Excel 中修复它,但这并不是本次练习的真正目标。 经过一些阅读,我认为最好创建一个字典字典,以便在创建 CSV 时我可以使用数字和效果标签为我的 CSV 创建标题。

我当前的代码如下所示:

    WildMagic = {}
for effect in textRegex.findall(str(text.read())):
    WildMagic[effect]["item"]=effect[1]
    WildMagic[effect]["value"]=effect[3]

当我勾勒出代码时,我的想法是这段代码将创建字典,然后遍历文本块中的每个项目。 对于每个数字和效果,它将创建一个如下所示的字典条目:

{1:{"item":NUMBERS, "value":SPELL_EFFECT}, 2:{"item":NUMBERS, "value":SPELL_EFFECT}...}

这个循环能够打印每个数字、效果对,所以我知道我错过了一些东西。 任何帮助表示赞赏。 谢谢!

编辑:用于写入以下 CSV 的代码:

with open("WildMagicCSV.csv", "w") as CSVfile:
    file = csv.DictWriter(CSVfile,WildMagic.keys())
    file.writeheader()
    file.writerow(WildMagic)

编辑 2:正在读入字典的文本如下所示。 我上面描述的初始字典中也有一个例子。 输入如下所示:

2642 Huge volumes of ectoplasm ooze from the caster's nostrils
2643 Icy winds buffet the caster for 2d8-1 days
2644 If alive, caster is totally healed in each of the next 1d6 hours

有 10,000 个条目。

首先,如果您想保持 4 位数字,您应该将0000视为字符串。 我将假设所有数字都是字符串 -> '0000'

来自WildMagic

WildMagic = {'0000': "Target's head turns into a watermelon", '0001': "Target's head turns into a cucumber"}
wild_magic = [{'id': k, 'text': v} for k, v in WildMagic.items()]
# output
[{'text': "Target's head turns into a watermelon", 'id': '0000'}, {'text': "Target's head turns into a cucumber", 'id': '0001'}]

DictWriter那里后,您可以使用csv库中的DictWriter

import csv

with open('result_file.csv', 'w') as _f:
    fieldnames = wild_magic[0].keys()
    writer = csv.DictWriter(_f, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(wild_magic)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM