我有一个具有这种结构的dict对象
{"a": '{"b": "c"}'}
我想使用循环将不同的值插入"c"
区域中,以便在项目中的其他地方使用。问题在于b和c周围的单引号使这一点变得更加困难。
我尝试过:
{"a": '{"b": "{}"}.format("d")'}
但是这将返回dict而不评估格式函数。
我也尝试过:
{"a": '{"b": "{}"}'.format("d")}
但是这将返回错误。我经历了2个小时的组合练习以及诸如(this,this和this之类的问题,但我意识到我需要知道自己在做什么的人的帮助。
可行的解决方案如下:
x = {"a": '{"b": "c"}'}
val = "d"
magic(x, val)
>>> {"a": '{"b": "d"}'}
注意: 在评论中问“为什么使用这种格式”?我没有创建这些对象,因此它们不是我的选择。我有一个已连接的api。我正在提取当前数据,对其进行更改,然后将其上传回。没有机会“不使用字符串文字”。这就是api帖子所期望的。我现在无法要求维护者更改其存储系统
答案 0 :(得分:3)
这应该为您工作
import json
obj = {"a": '{"b": "c"}'}
inner_a = json.loads(obj['a'])
inner_a['b'] = 'd'
obj['a'] = json.dumps(inner_a)
答案 1 :(得分:0)
尝试一下:
import ast
x = {"a": '{"b": "c"}'}
a = ast.literal_eval(x['a'])
a['b'] = 'd'
x['a'] = str(a)
现在:
print(x)
是:
{"a": '{"b": "d"}'}
答案 2 :(得分:0)
您正在尝试构建字符串文字,而直接构建dict更容易;本身不需要是字典文字的dict文字中的值就不需要了。问题在于d['a']
的值是字符串而不是字典。这真的有必要吗?对于简单的字典,您可以简单地使用:
>>> def magic(d, val):
... d['a']['b'] = val
...
>>> my_dict = {"a": {"b": "c"}} # my_dict['a'] is also a dict
>>> magic(my_dict, 'd')
>>> my_dict
{'a': {'b': 'd'}}
>>> magic(my_dict, {'x': 1, 'y' :2, 'z': 3})
>>> my_dict
{'a': {'b': {'x': 1, 'y': 2, 'z': 3}}}
但是,当值为字符串时,很大程度上取决于其格式。如果键都是字符串,而值是字符串或数字,则可以使用json
模块将其转换为字典,对其进行操作然后放回原处:
>>> import json
>>> def smagic(d, val):
... inner = json.loads(d['a'])
... inner['b'] = val
... d['a'] = json.dumps(inner)
...
>>> my_dict = {"a": '{"b": "c"}'} # my_dict['a'] is a string
>>> smagic(my_dict, "Is this it?")
>>> my_dict
{'a': '{"b": "Is this it?"}'}
您可以使用repr
和eval
扩展此解决方案,但我建议您避免这种复杂性,除非无法避免。
答案 3 :(得分:-1)
#use this code according for reference
print("enter name\n")
n1=input("enter 1st name ")
ln=input("enter last name ")
add=input("enter address ")
dic={'name':{"1st name":n1,"lname":ln},'address':add}
print(dic.values())
print(dic)