Добавлять значения к определенным ключам в словаре? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть набор данных, который в настоящее время представляет собой словарь: этот набор тестов (все элементы с "t c"). Итак, у меня было несколько циклов for для перебора данных:

for key, value in data.items(): 
    new_data_set = {}
    new_data_set.update({key: ''})
    for items in value: 
        if tc_flag in items:        #this flag basically looks for items with tc
          new_dict.update({key:items})

Это приводит к выводу:

{Test Suite#1: [tc1], Test Suite#2: [tc4]} 

Но я хочу получить вывод примерно так:

{Test Suite#1: [tc1], [tc2], [tc3], Test Suite#2: [tc4], [tc5], [tc6]}

Как бы я мог это сделать?

1 Ответ

0 голосов
/ 18 марта 2020

Вы хотите, чтобы в качестве значения, как список, вам нужно было добавлять каждый элемент, а не заменять предыдущий, составлять список на каждой итерации, чтобы сохранить все, что вам нужно

data = {"Test Suite  # 1": ["unnecessary info", "tc1", "tc2", "tc3", "unnecessary info"],
        "Test Suite  # 2": ["unnecessary info", "tc4", "tc5", "tc6", "unnecessary info"]}
new_dict = {}
tc_flag = "tc"
for key, value in data.items():
    keep_values = []
    for items in value:
        if tc_flag in items:  # this flag basically looks for items with tc
            keep_values.append(items)
    new_dict[key] = keep_values

print(json.dumps(new_dict))  # {"Test Suite  # 1": ["tc1", "tc2", "tc3"], "Test Suite  # 2": ["tc4", "tc5", "tc6"]}

Это можно сделать с defaultdict, который автоматически использует то, что вы даете в качестве значения, здесь list

new_dict = defaultdict(list)
for key, value in data.items():
    for items in value:
        if tc_flag in items:  
            new_dict[key].append(items)

Вы можете сократить это с помощью dict-compceptionsion

new_dict = {
    key: [item for item in values if tc_flag in item]
    for key, values in data.items()
}
...