Python - 创建具有多个键和值为字典的字典

3

我有一个字典:

test={"11.67":1,"12.67":2}

我的期望输出结果如下:

{'11.67': {'value': '11'}, '12.67': {'value': '12}}

第二个字典中的值是在键进行分割时的第一个索引。

我写了这个:

test={"11.67":1,"12.67":2}
indexes=test.keys()
final_dict={}
temp_dict={}
for index in indexes:
    b=index.split('.')[0]
    temp_dict['value']=b;
    final_dict.update({index:temp_dict})
print (final_dict)

但结果是错误的:

{'11.67': {'value': '12'}, '12.67': {'value': '12'}}

不确定出了什么问题。谢谢。

还有一个更新:我必须使用字典键(dict_keys),也就是索引。我必须从代码的那一部分开始。

5个回答

5
您可以这样做:
test = {"11.67": 1, "12.67": 2}
res = {key: {"value": str(int(float(key)))} for key in test}
# {'11.67': {'value': '11'}, '12.67': {'value': '12'}}

我首先将字符串转换为float,然后使用int舍弃小数部分,并再次转换为str

你的代码出了问题,Carsten's answer中已经很好地解释了。


抱歉,我忘了提到我必须使用索引,因为我从那部分开始编写代码。 还有一个更新: 我必须使用索引,即dict_keys。 我必须从代码的那一部分开始。 - Veljko
1
那么它只会是for key in indexes。(而不是for key in test)。 - hiro protagonist

4
您的错误在于将temp_dict声明在循环外部。以下代码可以正常工作:
test={"11.67":1,"12.67":2}
indexes=test.keys()
final_dict={}
for index in indexes:
    temp_dict={}
    b=index.split('.')[0]
    temp_dict['value']=b;
    final_dict.update({index:temp_dict})
print (final_dict)

3
问题在于你总是引用同一个对象temp_dict,因此对它的任何更改都将反映在所有实例中。
我建议使用字典推导式来解决问题,这样可以将字典创建缩减为一行代码:
final_dict = {idx: {'value': idx.split('.')[0]} for idx in test.keys()}

3
尝试一下。
>>> {i:{'value': "%d"%eval(i)} for i in {"11.67":1,"12.67":2}}
{'11.67': {'value': '11'}, '12.67': {'value': '12'}}
>>> 

{} -> 字典推导式和旧字符串 "%s" 格式化


1

将temp_dict导入final_dict后,清空temp_dict。

祝好运!

test={"11.67":1, "12.67":2, "15.66":3}
indexes = test.keys()
final_dict = {}
temp_dict = {}
for index in indexes:
    b = index.split('.')[0]
    temp_dict['value'] = b
    final_dict[index] = temp_dict
    temp_dict = {}
print(final_dict)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接