如何将字典中的 ":" 转换为 "="

我正在使用 Python 获取 JSON 请求,并将其转换为字典。现在我需要将其转换为 Lua,以便将字典粘贴到我的 Lua 代码中;由于有很多字典,我在将 : 转换为 = 方面遇到了问题。

例如,Python 字典在打印时为 {"key" : value} 而 Lua 表只接受 {"key" = value}

点赞
用户11946505
用户11946505
lines = []
for key, value in your_dict.items():
    lines.append(f'{"{key}"={value}} ')
with open("./dict.txt", "w"): as f:
    f.write('\n'.join(lines))

# 将字典写入文本格式

lines = []
for key, value in your_dict.items():
    lines.append(f'{"{key}"={value}} ')  # 将字典的键值对转换为字符串,并添加到列表中
with open("./dict.txt", "w") as f:
    f.write('\n'.join(lines))  # 将列表中的字符串以换行符连接,然后写入文件中

注意:本翻译中“字典”指的是原代码中的 your_dict 变量所代表的 Python 字典类型。

2020-08-14 23:34:42
用户6879826
用户6879826

这是一种笨拙、易碎的解决方案,因为 OP 表示使用 JSON 库是行不通的。

不清楚 Python 字典中可能存储的值是什么,但很容易可能是字符串或其他字典。以下尝试处理嵌套字典,并将字符串值放入引号中。请注意,Lua 在表构造器中不使用引号来表示键。

#Python 3 代码
d = {'one': 1'two': 2'adict':{'x''a''y''b'}}

def py_dict_to_lua_table(d):
     lines = '{'
     for k,v in d.items():
          if isinstance(v, dict):
              v = py_dict_to_lua_table(v)
          elif isinstance(v, str):
              v = f'"{v}"'
          lines += f'{k} = {v},'
     lines += '}'
     return lines

lua_string = "my_lua_table = " + py_dict_to_lua_table(d)

with open('test.lua', 'w') as f:
      f.write(lua_string)

然后,从命令行:

$ python3 convert.py

然后,从 Lua:

$ lua -i test.lua
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> dofile "../lua/lib/utils.lua"
> table.inspect(my_lua_table)
one = 1
adict =
        y = b
        x = a
two = 2
> my_lua_table.adict.y
b

请注意,如果 Python 字典包含不方便的值,例如数组,则这将无法工作。必须增强 py_dict_to_lua_table 函数,以将 Python 数组表示为 Lua 表或其他表。如果可能的话,还有另一个原因,就是只使用 JSON 解析库。

2020-08-15 01:48:56
用户10157759
用户10157759

你可以使用json.JSONEncoder

from json import JSONEncoder

encoder = JSONEncoder(separators=[', ', ' = '])
dict_str = encoder.encode({'a': 1, 'b': {'c': 3, 'd': [4, 5]}})

print(dict_str)

输出结果为:

{"a" = 1, "b" = {"c" = 3, "d" = [4, 5]}}
2020-08-15 02:12:06