#python #ruby
#python #ruby
Вопрос:
В настоящее время я пишу скрипт на python из модуля ruby. У меня возникли проблемы с этим аспектом перевода ruby на python.
Ruby:
plan_metrics[test_name]={ passed_count: 0, blocked_count: 0, untested_count: 0, failed_count: 0, reviewed_count: 0, test_harness_issue_count: 0, bug_failure_count: 0, defect_list: [] }
entry['runs'].each do |run|
metric_hash = plan_metrics[test_name]
%i[passed_count blocked_count untested_count failed_count].each do |key|
metric_hash[key] = metric_hash[key] run[key.to_s]
end
В этом коде entry['runs']
хранятся фактические значения passed_count
, blocked_count
, untested_count
, и failed_count
, но в нескольких словарях. Предполагается, что это перебирает их, суммирует все значения и помещает их в ОДИН символ (т.е. passed_count
), который хранится в metric_hash
Теперь, когда я пытаюсь перевести на python, я не использую символы, а делаю это следующим образом
Мой перевод на Python:
plan_metrics[test_name]={ "passed_count": 0, "blocked_count": 0, "untested_count": 0, "failed_count": 0, "reviewed_count": 0, "test_harness_issue_count": 0, "bug_failure_count": 0, "defect_list": [] }
for run in entry["runs"]:
metric_hash = plan_metrics[test_name]
for key in [metric_hash["passed_count"], metric_hash["blocked_count"], metric_hash["untested_count"], metric_hash["failed_count"]:
metric_hash[key] = metric_hash[key] run[str(key)]
Но для этого я KeyError: 0
подключаюсь metric_hash[key] = metric_hash[key] run[str(key)]
было бы
for key in [metric_hash["passed_count"], metric_hash["blocked_count"], metric_hash["untested_count"], metric_hash["failed_count"]:
быть надлежащим эквивалентом
%i[passed_count blocked_count untested_count failed_count].each do |key|
и если да, то что вызывает KeyError: 0?
если нет, то как я могу выполнить то, что сделал пример ruby, с взаимодействием по массиву символов в python
Если вам нужна дополнительная информация о данных, дайте мне знать, за что print()
благодарить
Ответ №1:
В python вы делаете
for key in [metric_hash["passed_count"], metric_hash["blocked_count"], metric_hash["untested_count"], metric_hash["failed_count"]:
Это означает, что key
принимает значения из списка [0, 0, 0, 0]
. Вы понимаете, почему?
Комментарии:
1. Да, это то, что у меня есть выше, вы спрашиваете, чтобы я понял, почему существует
keyerror: 0
?2. @Mfreeman: Я спрашиваю, вы понимаете, почему эта строка эквивалентна
for key in [0, 0, 0, 0]
?3. Да, я это вижу, но я не вижу вашей точки зрения, кроме того, что они равны. Означает ли это, что это не будет правильным переводом, поскольку в примере ruby используются символы?
4. В примере ruby это изменение значения символов (т.е.
passed_count
), Но в примере python я просто меняю список чисел, ни к чему не привязанных. Мой вопрос в том, как я мог бы выполнить это на python5. @Mfreeman: да, точно, это неправильный перевод. Вы не передаете ключи (как в ruby), вы передаете значения этих ключей. Вы можете исправить свой код на python, передав ключи, такие же, как у ruby. Вы знаете, что
%i[passed_count blocked_count]
или%w[passed_count blocked_count]
делать в ruby, да?