Я работаю над реализацией рабочего процесса с использованием 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 ответ
Я полагаю, вы просто ошиблись, когда дублировали ключи для каждого имени
Первый diff в groovy - как объявить карту (словарь в python)
my_dict = [:]
Подробнее о классных коллекциях вы можете найти здесь: http: / /docs.groovy-lang.org/next/html/documentation/working-with-collections.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
Вы можете найти другие методы для Map в документации GDK: отличная карта просто Google gdk map
Как только Groovy Map расширяет java Map, проверьте основные методы в javadoc: java Map
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.