我有python文件sample.py
和tcl文件test.tcl
。在tcl文件中我只是调用python文件并打印dict
格式的python响应数据。你能帮我解决一下如何将python字典设为tcl键控列表格式。或者是否有任何python或tcl库包可用于从dict转换为键控列表?请分享您的想法...
sample.py
def f1() :
d = {}
d["name"] = "Justin"
d["Company"] = "AAA"
d["doj"] = 2015
print(d)
f1()
test.tcl
#! /usr/bin/tclsh
proc call_python {} {
set output [exec python sample.py]
puts $output
}
call_python
输出: {'name':'Justin','公司':'AAA','doj':2015} < / p>
答案 0 :(得分:1)
更新:添加花括号以支持带空格的键。
在tcl中,键控列表(dict)是具有偶数个令牌的任何字符串,所以这可以通过顺序打印键值对来完成。
<强> sample.py 强>
.main-div {
width: 700px;
margin: 0 auto;
border: 1px solid black;
justify-content: center;
padding: 5px;
}
<强> test.tcl 强>
def f1() :
d = {}
d["name"] = "Justin"
d["Company"] = "AAA"
d["doj"] = 2015
print " ".join(["{%s} {%s}" % (k,v) for k,v in d.items()])
这将输出:
#! /usr/bin/tclsh
proc call_python {} {
set output [exec python sample.py]
puts [dict keys $output]
puts [dict get $optput name]
}
call_python
答案 1 :(得分:1)
建议您使用与语言无关的序列化格式进行数据交换;像这样,你可以使用一个现有的库进行转换,并且有很多都经过了很好的测试。
JSON非常适合这项任务。在Python方面:
listbox*
在Tcl方面(使用强烈推荐的 rl_json包):
import json
def f1():
d = {}
d["name"] = "Justin"
d["Company"] = "AAA"
d["doj"] = 2015
print(json.dumps(d))
f1()
但是,在这种情况下,对象非常简单,Tcllib中用于解析JSON的小得多的包也可能足够好:
#! /usr/bin/tclsh
package require rl_json
proc call_python {} {
set output [exec python sample.py]
# Example of parsing the JSON
set unpacked {}
foreach key {name Company doj} {
dict set unpacked [string tolower $key] [json get $output $key]
}
return $unpacked
}
# Print the parsed value out
puts [call_python]
对于更复杂的文档,包含rl_json包的版本 strong 是首选。