如何将python字典转换为tcl键控列表格式?

时间:2017-07-19 14:39:30

标签: python python-2.7 python-3.x tcl

我有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>

2 个答案:

答案 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 是首选。