У меня есть массив (Arr []), для каждого элемента в массиве я хотел бы, чтобы он проходил через словарь (specs {}) и вычислял соответствующие значения и сохранял их в новом словаре, но точно, как указать ключ и значение для этого нового словаря {результаты {}).

Arr=["saucer", "shoes"]
def calc(Arr, context, user_results):
    results = {}
    for x in Arr:
        if x == specs.keys():
            results = specs.values
            results.append(x : results)
    return results

specs = {'cup': 3,'saucer': 5, 'bag': 17, 'shoes': 9}

Результаты = {"блюдце": 5, "обувь": 9}

1
offthehook 1 Май 2019 в 20:51

5 ответов

Лучший ответ

Вы можете использовать dict понимание, чтобы создать новый dict, используя элементы в specs

results = {key: specs[key] for key in Arr if key in specs}
4
CoryKramer 1 Май 2019 в 18:27

Ввод:

Arr=["saucer", "shoes"]
specs = {'cup': 3,'saucer': 5, 'bag': 17, 'shoes': 9}

Код №1:

results = {item: specs.get(item, None) for item in Arr if item in specs}

Код № 2 .

results = {key: value for key, value in specs.items() if key in Arr}

Результат:

{'saucer': 5, 'shoes': 9}
0
Olvin Roght 1 Май 2019 в 18:10
In [9]: specs = {'cup': 3,'saucer': 5, 'bag': 17, 'shoes': 9}

In [10]: Arr=["saucer", "shoes"]

In [11]: R = {k: v for k, v in specs.items() if k in Arr}

In [12]: R
Out[12]: {'saucer': 5, 'shoes': 9}
1
Osman Mamun 1 Май 2019 в 17:54

Просто проверьте список и создайте другой словарь

specs = {'cup': 3,'saucer': 5, 'bag': 17, 'shoes': 9}

Arr= ["saucer", "shoes"]

em={}

for item in Arr:
    if item in specs:
        em[item] = specs[item]
print(em)

{'saucer': 5, 'shoes': 9}  
0
Zaynul Abadin Tuhin 1 Май 2019 в 18:04

Вы можете использовать функцию itemgetter для получения значений из словаря и zip списка arr со значениями для построения нового dict:

from operator import itemgetter

arr = ["saucer", "shoes"]

specs = {'cup': 3, 'saucer': 5, 'bag': 17, 'shoes': 9}

dict(zip(arr, itemgetter(*arr)(specs)))
# {'saucer': 5, 'shoes': 9}
0
Mykola Zotko 1 Май 2019 в 19:09