2

Ironpython スクリプトで定義されたディクショナリがあり、C# コードからこのディクショナリにアクセスしたいと考えています。誰かが私の要件を達成するためのサンプルコードを提供できますか?

申し訳ありませんが、コードに関する問題の説明について言及していませんでした。

import clr
clr.AddReference("System.Core")
import System
clr.ImportExtensions(System.Linq)
from System.Collections.Generic import Dictionary,List

def check(self):
    dict1 = Dictionary[str,str]
    dict1["a"] = "aa"
    dict2 = Dictionary[str,str]
    dict2["b"] = "bb"
    self[0] = dict1
#   self.Add(dict1)
    return self

C#

var runtime = Python.CreateRuntime();
dynamic test = runtime.UseFile("Test.py");


var myDictList = new List<Dictionary<string, string>>();
var myDL = new List<Dictionary<string, string>>();
myDL = test.check(myDictList);

私の目的は、Pythonで辞書のリストを操作(追加、リストから削除)し、それをC#に送り返してさらに使用できるようにすることです。私が欲しいのは、PythonまたはC#で辞書のリストを作成し、両方(PythonとC#)の場所で使用することです。どうすればそうできますか。

4

2 に答える 2

6

これは機能します:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Scripting.Hosting;
using Microsoft.Scripting.Utils;
using Microsoft.Scripting.Runtime;
using IronPython;
using IronPython.Hosting;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ScriptEngine pyEngine = Python.CreateEngine();
            ScriptScope pyScope = pyEngine.CreateScope();
            ScriptSource pyScript = pyEngine.CreateScriptSourceFromString("d = {'a':1,'b':2,'c':3}");
            CompiledCode pyCompiled = pyScript.Compile();
            pyCompiled.Execute(pyScope);
            IronPython.Runtime.PythonDictionary d = pyScope.GetVariable("d");
            Console.WriteLine(d.get("a"));
            Console.Read();
        }
    }
}

キー「a」の最初の値を提供する必要があります。これでうまくいくことを願っています。1 つまたは 2 つのインクルードが多すぎる可能性があります。

于 2013-04-29T15:25:03.490 に答える
1
def check(self):
    dict1 = Dictionary[str,str]()
    dict1["a"] = "aa"
    dict2 = Dictionary[str,str]()
    dict2["b"] = "bb"
    self[0] = dict1
    #   self.Add(dict1)
    return self

()に注意してください。

于 2013-10-24T08:04:31.647 に答える