Как упростить цикл for в цикле for и в операторе if? - PullRequest
0 голосов
/ 13 января 2019

Можно ли сократить этот код до 1-2 строк?

Я пытался сделать это в понимании списка, но я не уверен, как это будет работать, если один из циклов for использует ключ словаря.

for a in dict.keys():  
    for q in list:  
        if a in q:  
            dict[a].append(q)  

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

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Изначально я хотел предложить это:

{k: v for v in mylist for k in mydict if k in v}

Но потом я заметил, что вы на самом деле изменяете свои входные данные, и это не то, что происходит. Это должно фактически сделать то же самое (я сделал предположение или два относительно входных данных):

for key in mydict.keys():
    mydict[key].extend((i for i in mylist if key in i))

Но это незапрошенный совет. Фрагмент кода действительно не нуждается в сокращении. Скорее, это может быть связано с немного более многословием и более описательными именами переменных, которые помогут читателю пройти и помочь понять, что происходит.

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

0 голосов
/ 13 января 2019

Если вы хотите, вы можете превратить его в понимание списка следующим образом: [my_dict[a].append(q) for a in my_dict for q in my_list if a in q], но, как вы можете видеть в комментариях, это не рекомендуется и может быть на самом деле труднее для чтения и понимания.

То, что циклы используют для итерации, не важно. Я потратил время на то, чтобы понять, что for записывается в том порядке, в котором они находятся в структуре вложенного цикла, а не инвертируется как выражение для оценки.

...