Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何将字典值从字符串更改为字典?_Python_Dictionary_Nested - Fatal编程技术网

在python中,如何将字典值从字符串更改为字典?

在python中,如何将字典值从字符串更改为字典?,python,dictionary,nested,Python,Dictionary,Nested,我的字典是这样的:d={741178:u{“宽度”:37.8365,“高度”:150,“长度”:234},{“宽度”:35.7,“高度”:178,“长度”:122}',741179:u{“宽度”:98.67,“高度”:180,“长度”:994},{“宽度”:98.79,“高度”:167.8,“长度”:154.22} 我怎样才能把它变成一本词典?我试过: for k, v in d.items(): v = ast.literal_eval(v) 但这是行不通的。由于我的每个伪嵌套字典实

我的字典是这样的:
d={741178:u{“宽度”:37.8365,“高度”:150,“长度”:234},{“宽度”:35.7,“高度”:178,“长度”:122}',741179:u{“宽度”:98.67,“高度”:180,“长度”:994},{“宽度”:98.79,“高度”:167.8,“长度”:154.22}

我怎样才能把它变成一本词典?我试过:

for k, v in d.items():
    v = ast.literal_eval(v)
但这是行不通的。由于我的每个伪嵌套字典实际上都是一个字符串,如何在字典中更改它们的数据类型?

您可以使用或,在这种情况下,输出几乎相同。对于JSON,您必须将字符串括在方括号中,因为它们都包含两个用逗号分隔的字典,所以获取它们的唯一合理方法是作为字典列表。对于Python文本,去掉方括号(或用括号替换)会导致每对由逗号分隔的字典被解释为2元组(应该是双元组,但已经有了不同的含义)

我个人建议使用
json.loads()
,因为json目前是新项目中最常用的数据交换格式。如果字符串的源可以添加方括号以生成有效的JSON,那就最好了

import ast
import json

d = {741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',
     741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}

p = {k: ast.literal_eval(v)   for k, v in d.items()}
j = {k: json.loads('['+v+']') for k, v in d.items()}

print(p)
print(j)

# {741178: ({'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}), 741179: ({'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22})}
# {741178: [{'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}], 741179: [{'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22}]}

如您所见,唯一的区别是
()
⟷<代码>[]

我已经更正了json并删除了不必要的双引号和逗号 如果要将字典作为值,则必须将值作为字典数组

import json    
d={741178:
       u'{"width":37.8365,"height":150,"length":234},'
       u'{"width":35.7,"height":178,"length":122}',
   741179: u'{"width":98.67,"height":180,"length":994},'
           u'{"width":98.79,"height":167.8,"length":154.22}'

   }
for key, value in d.items():
    d[key]= json.loads('['+value+']')
print(d)

非常感谢,这非常有帮助!