2015-09-10 2 views
0

Я хочу my_list должен иметь Dict с тем же ключом, но с несколькими значениямисписок Python с Dict должны иметь тот же ключ

my_list = [] 
my_dict = {} 
old_list = ['1','2','3','4','5'] 
for i in old_list: 
    my_dict['Cidr'] = i 
    my_list.append(my_dict) 
print(my_list) 

Выход:

[{'Cidr': '5'}, {'Cidr': '5'}, {'Cidr': '5'}, {'Cidr': '5'}, {'Cidr': '5'}] 

Ожидаемый результат должен быть:

[{'Cidr': '1'}, {'Cidr': '2'}, {'Cidr': '3'}, {'Cidr': '4'}, {'Cidr': '5'}] 
+0

Вы должны создать новый dict на каждой итерации, а не вставлять один и тот же dict 5 раз. Ваш dict просто сохраняет значение из последнего обновления. – wap26

ответ

3

Попробуйте это

my_list = [] 
old_list = ['1','2','3','4','5'] 
for i in old_list: 
    my_dict = {} 
    my_dict['Cidr'] = i 
    my_list.append(my_dict) 
print(my_list) 
+0

Как заменить [{'Cidr': '1'}, {'Cidr': '2'}, {'Cidr': '3'}, {'Cidr': '4'}, {'Cidr': '5'}] с [{"Cidr": "1"}, {"Cidr": "2"}, {"Cidr": "3"}, {"Cidr": "4"}, {"Cidr ":" 5 "}] Я не вижу метод замены для списка – user60679

+0

my_list = str (my_list) .replace (" '",'" ') – Gunjan

2

Попробуйте использовать copy.deepcopy.

import copy 
my_list = [] 
my_dict = {} 
old_list = ['1','2','3','4','5'] 
for i in old_list: 
    my_dict['Cidr'] = i 
    my_list.append(copy.deepcopy(my_dict)) 
print my_list 
5

Ваш дикт становится мутированным - у вас есть только один дикт, и каждый цикл вы просто меняете значение в ключе «Cidr». Массив содержит 5 ссылок на один и тот же dict.

Что вам нужно сделать, это создать новый Dict каждый раз, когда вы делаете петлю:

my_list = [] 
old_list = ['1','2','3','4','5'] 
for i in old_list: 
    my_dict = {} 
    my_dict['Cidr'] = i 
    my_list.append(my_dict) 
print(my_list) 

Таким образом, каждый элемент массива будет иметь свой собственный словарь.

2
old_list = ['1','2','3','4','5'] 
my_list = [{'Cidr': i} for i in old_list] 
+0

Это хороший способ сделать это, но это не объясняет проблему или помочь OP узнать. – javanut13