как выполнить итерацию по списку и добавить словарь в другой список

#python #dictionary

#python #словарь

Вопрос:

 lst = ['12233223','13232423','23453443']
 

я ищу вывод следующим образом:

 new_list = [{'id':'12233223', 'new_id':'d2233223'},{'id':'13232423','new_id':'d3232423'}]
 

но я получаю это

 [{'id':13453443,'new_id':13453443},{'id':13453443,'new_id':13453443}]
 

Вот мой код

 lst = [{'id':'12233223'},{'id':'13232423',} {'id':'23453443'}]
d={}
new_list=[]
for each in lst:
    d['id']= each
    if len(each)==8 and each[0]==1:
    new_id = each.replace('1','d',1)
    d['new_id'] = new_id
    new_list.append(d)
 

Комментарии:

1. Вы добавляете один и тот же словарь каждый раз через цикл. Перемещение d={} внутри цикла.

2. Ваш lst код — это список словарей, разве это не должен быть список строк?

3. @Bramar. Большое спасибо. Я ввел внутренний цикл d={}, и у меня это сработало. еще раз спасибо

Ответ №1:

Как насчет этой более простой версии. Вместо замены вы можете просто добавить 'd' в string[1:]

 [{'id':i,'new_id':'d' i[1:]} for i in lst]
 
 [{'id': '12233223', 'new_id': 'd2233223'},
 {'id': '13232423', 'new_id': 'd3232423'},
 {'id': '23453443', 'new_id': 'd3453443'}]
 

РЕДАКТИРОВАТЬ: только что увидел ваше if условие. Обновите с этим —

 [{'id':i,'new_id':'d' i[1:]} for i in lst if i[0] if i[0]=='1' and len(i)==8]
 
 [{'id': '12233223', 'new_id': 'd2233223'},
 {'id': '13232423', 'new_id': 'd3232423'}]