понимание списка для значений словаря, присвоение 0 или 1 на основе значения - PullRequest
0 голосов
/ 24 июня 2019

Я хочу использовать списки для создания вектора из 0 и 1 на основе значений в словаре.

В этом примере я хочу, чтобы каждое положительное число возвращалось как 1, а каждое число 0 оставалось 0. Однако мне нужно, чтобы решение менялось таким образом, чтобы при желании установить пороговое значение равным 0,25 (вместо 0) Я мог бы легко внести это изменение.

test_dict = {'a':0.6, 'b':0, 'c':1, 'd':0.5}
skill_vector = [1 for skill.values() in test_dict if skill.values > 0 else 0]

Желаемый результат: [1,0,1,1]

Редактировать: Как указывали мудрые умы, словарь не упорядочен, поэтомувывод не будет полезен.В свете этого я намерен использовать подкласс OrderedDict.

Ответы [ 4 ]

4 голосов
/ 24 июня 2019

Вы можете преобразовать логическое значение из вашего теста в целое число вместо использования шаблона if/else:

test_dict = {'a':0.6, 'b':0, 'c':1, 'd':0.5}

threshold = 0
[int(v > threshold) for v in test_dict.values()]
# [1, 0, 1, 1]

Это предполагает, что вы используете версию python, которая поддерживает ключи в порядке вставки.

0 голосов
/ 24 июня 2019

Код:

test_dict = {'a':0.6, 'b':0, 'c':1, 'd':0.5}
skill_vector = list(map(int, map(bool, test_dict.values())))

Выход:

[1, 0, 1, 1]
0 голосов
/ 24 июня 2019

Если вы хотите использовать функцию skill_values:

def skill_values(x):
     return skill_values >= .25

skill_vector = [1 if skill_values(x) else 0 for x in test_dict.values()]

или включить отображение в int из другого ответа

skill_vector = [int(skill_values(x)) for x in test_dict.values()]
0 голосов
/ 24 июня 2019

Вы можете использовать троичный оператор:

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> test_dict = {'a':0.6, 'b':0, 'c':1, 'd':0.5}
>>> [1 if x > 0 else 0 for x in test_dict.values()]
[1, 0, 1, 1]

Вы также можете использовать словарь, чтобы убедиться, что результат сопоставлен с правильным ключом:

>>> {k:1 if v > 0 else 0 for k,v in test_dict.items()}
{'a': 1, 'b': 0, 'c': 1, 'd': 1}
...