Я хочу использовать понимание списка, чтобы создать вектор 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.

0
user9105277 24 Июн 2019 в 17:21

4 ответа

Лучший ответ

Вы можете преобразовать логическое значение из вашего теста в int вместо использования шаблона 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, которая хранит ключи в порядке вставки.

4
Mark Meyer 24 Июн 2019 в 14:26

< Сильный > Код:

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
Olvin Roght 24 Июн 2019 в 14:28

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

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}
0
Colin 24 Июн 2019 в 14:26

Если вы хотите использовать функцию 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
Deepstop 24 Июн 2019 в 14:33