Конвертировать Python в Groovy - вложенный JSON - PullRequest
0 голосов
/ 16 октября 2019

Я работаю над реализацией рабочего процесса с использованием Nextflow. Nextflow использует groovy в качестве базового языка, и тогда каждый процесс может использовать любой язык программирования независимо. По сути, я программист на Python, поэтому написанный мной код написан на Python. И у меня возникли небольшие проблемы с преобразованием языка.

data = {
    "a" : "A",
    "b" : "B",
    "c" : {
        "somename":{
            "z" : "Z",
            "y" : "Y",
            "params" :{
                "minimum": "3000",
                "ignore": "60",
                "maximum_A": "2500",
                "maximum_B": "500"
            }
        },

        "somename2":{
            "z" : "Z",
            "y" : "Y",
            "params" :{
                "minimum": "3000",
                "ignore": "60",
                "maximum_A": "2500",
                "maximum_B": "500"
            }
        }
    }
}

CNS_PARAM_LIST = []
my_dict = {}

for each in data["c"]:
    for k, v in data["c"][each].get('params', {}).items():
        CNS_PARAM_LIST.extend([k, str(v)])
    my_dict[each] = CNS_PARAM_LIST

print(my_dict)

По сути, у меня есть JSON (данные), и мне нужно создать словарь из некоторых вложенных полей. Выходные данные для приведенного выше кода:

{'somename': ['minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500', 'minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500'], 'somename2': ['minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500', 'minimum', '3000', 'ignore', '60', 'maximum_A', '2500', 'maximum_B', '500']}

Просто введите somename и somename2 ключей и введите params значения.

Какой-нибудь отличный кодер, который может взломать это в 1/100 раз? Я уверен, что есть также способ сделать этот код более эффективным, любые идеи приветствуются!

1 Ответ

1 голос
/ 16 октября 2019

Полагаю, вы просто ошиблись, когда дублировали ключи для каждого имени

первый раз в groovy - как объявить карту (словарь в python)

my_dict = [:]

подробнее о коллекциях groovy выможно найти здесь: http://docs.groovy -lang.org / next / html / Documentation / working-with-collection.html

код для вашего дела:

def data = [
    "a" : "A",
    "b" : "B",
    "c" : [
        "somename":[
            "z" : "Z",
            "y" : "Y",
            "params" :[
                "minimum": "3000",
                "ignore": "60",
                "maximum_A": "2500",
                "maximum_B": "500"
            ]
        ],

        "somename2":[
            "z" : "Z",
            "y" : "Y",
            "params" :[
                "minimum": "3000",
                "ignore": "60",
                "maximum_A": "2500",
                "maximum_B": "500"
            ]
        ]
    ]
]
def my_dict = data.c.collectEntries{k,v-> [k,v.params]  }

println my_dict
//if you want to print it as json:
println groovy.json.JsonOutput.toJson(my_dict)

я использую collectEntries метод для объекта карты

вы можете найти другие методы для Map в документации GDK: groovy Map просто google gdk map

как только Groovy Map расширяет java Map, проверьте основные методы в javadoc: java Map

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...