我正在努力解决这个循环,我希望将值赋给嵌套字典。我有一个名为 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,}}
感谢您的帮助。
答案 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)