5

Я экспериментирую с python и застреваю, пытаясь понять сообщения об ошибках в контексте того, что я делаю.Понятия с несколькими входными наборами

Я играл с постижениями и пытаюсь найти шаблон, чтобы создать список/словарь понимание с более чем одним входом установлен (при условии, что это возможно):

Примечания: Здесь входное слово set означает область ввода понимания. В нотации setbuilder, откуда python выводил свои интерпретации [Y для X в LIST], Y - это выходная функция, X - переменная, а LIST - это набор входных данных.

Предположим, у меня есть следующий рабочий код:

from random import randint 

mydict = {k: 0 for k in range(10)} 
result = {randint(0,9): v + 1 for v in mydict.values()} 

Я не пытался делать ничего особенного об этом. Это даже не полезный код, потому что он не будет работать так, как ожидалось. Все элементы в словаре будут иметь значение 1, а не только те, на которые указывает случайный генератор. Моя единственная цель - получить основу, откуда я начинаю свою попытку работать с кортежем наборов ввода.

from random import randint 

mydict = {k: 0 for k in range(10)} 
result = {k: v + 1 for k, v in (randint(0,9), mydict.values())} 

Эта опция дает мне: TypeError: 'int' object is not iterable.

Путем замены входных наборов и распаковка у меня есть:

result = {k: v + 1 for *v, k in (mydict.values(), randint(0,9))} 

Но этот вариант дает мне: TypeError: can only concatenate list (not "int") to list

ли эти ошибки появляются, потому что я пытаюсь сделать что-то язык грамматика не понимает, или я что-то упускаю, и на самом деле могу исправить код?

+4

Это не ясно, какой выход вы * * ожидать. Скажем, «randint (0,9)» возвращается 3; какой «результат» вы хотите? – DSM

+0

Вы хотите, чтобы диктофон с ключами из диапазона (10) 'и случайных значений из' randint'? – Navith

+1

Вы, люди, сосредоточены на намерении кода. Единственное намерение здесь - посмотреть, есть ли способ получить кортеж входных множеств в понимании. Код - это всего лишь моя основа для экспериментов. –

ответ

7

Вам нужно будет создать отдельное понимание случайных чисел, так как оно в настоящее время стоит, у вас есть только одно случайное число. Кроме того, вам нужно будет проноситься результатами, чтобы получить комбинированный объект:

>>> from random import randint 
>>> mydict = {k: 0 for k in range(10)} 
>>> result = {k: v + 1 for k, v in zip([randint(0,9) for _ in range(10)] , mydict.values())} 
>>> result 
{2: 1, 3: 1, 4: 1, 5: 1, 8: 1, 9: 1} 

Обратите внимание, что, так как ваш первоначальный ДИКТ имеет значение 0 для всех своих ключей, все значения в результирующем Словаре являются 1 (0+1) ,

Кроме того, поскольку мы делаем клавиши случайными, возможны возможные перекрытия (скажем, 2 был сгенерирован дважды), поэтому мы не видим всех ключей в словаре result.

Как @wim отмечает в комментариях ниже, лучший способ создать этот результат словарь будет использовать:

>>> {randint(0,9): v+1 for v in mydict.values()} 
{0: 1, 1: 1, 2: 1, 3: 1, 6: 1, 7: 1} 
+2

Это странный способ пойти об этом. Вы можете просто поставить randint (0, 9) в качестве k и включить только v в понимание. – wim

+1

@wim Правильно, я был сосредоточен на том, чтобы сообщить OP, что неправильно с текущим кодом ... –

+1

Это потрясающе, му! Спасибо, что помог мне найти, где я ошибся. @wim, это только эксперимент. Реальное намерение состояло в том, чтобы попытаться найти способ иметь кортеж наборов ввода –

Смежные вопросы