在循环字典

时间:2018-01-30 15:21:57

标签: python

我正在努力解决这个循环,我希望将值赋给嵌套字典。我有一个名为 stp2 的列表,以及我用 none 创建的默认字典作为值。 我试图逐个获取列表元素并分配给字典。

stp2=['Anna', 'William', 'Mary', 'Ben', 'Richard','Calvin', 'Rock']

而my_dict是默认的dict(嵌套),如下所示:

defaultdict(<class 'dict'>, {0: {'name': None, 'price': None,}, 1:{'name': None, 'price': None,}, 2: {'name': None, 'price': None,}, 3: {'name': None, 'price': None,}, 4: {'name': None, 'price': None,}, 5: {'name': None, 'price': None,}, 6: {'name': None, 'price': None,}})

我正在使用此循环来更新值:

for z in enumerate(stp2):
 my_dict[z[0]]['name']=z[1]

print(my_dict)

我的输出应该看起来像这样,但我得到了&#34; Rock&#34;在重复的每一个价值中。

理想输出:

{0: {'name': 'Anna', 'price': None,}, 1:{'name': 'William', 'price': None,}, 2: {'name': 'Mary', 'price': None,}, 3: {'name': 'Ben', 'price': None,}, 4: {'name': 'Richard', 'price': None,}, 5: {'name': 'Calvin', 'price': None,}, 6: {'name': 'Rock', 'price': None,}}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

尝试以下代码。你没有更新密钥,因为你得到了dict中所有密钥的相同值。

stp2=['Anna', 'William', 'Mary', 'Ben', 'Richard','Calvin', 'Rock']
d = {
 0: {'name': None, 'price': None},
 1: {'name': None, 'price': None},
 2: {'name': None, 'price': None},
 3: {'name': None, 'price': None},
 4: {'name': None, 'price': None},
 5: {'name': None, 'price': None},
 6: {'name': None, 'price': None}}
for index, value in enumerate(stp2):                                                                                                      
   d[index]['name'] = value
print d
# output: 
{0: {'name': 'Anna', 'price': None},
 1: {'name': 'William', 'price': None},
 2: {'name': 'Mary', 'price': None},
 3: {'name': 'Ben', 'price': None},
 4: {'name': 'Richard', 'price': None},
 5: {'name': 'Calvin', 'price': None},
 6: {'name': 'Rock', 'price': None}}

答案 1 :(得分:1)

分两行

初始化空字典

>>> dict={}

使用列表推导更新字典

>>> for l1 in [{i:{'name':j,'price':None}} for i,j in enumerate(stp2)]:
    dict.update(l1)

最后的字典

>>> dict
{0: {'price': None, 'name': 'Anna'}, 1: {'price': None, 'name': 'William'}, 2: {'price': None, 'name': 'Mary'}, 3: {'price': None, 'name': 'Ben'}, 4: {'price': None, 'name': 'Richard'}, 5: {'price': None, 'name': 'Calvin'}, 6: {'price': None, 'name': 'Rock'}}

答案 2 :(得分:0)

在您的枚举中,我相信z并没有像您认为的那样指向名称。

my_dict = defaultdict(list)
tmp = {}
counter = 0
for person in stp2:
    tmp = {'name': person, 'price': None}
    my_dict[0] = tmp
    tmp = {}
    counter += 1

print(my_dict)