更改 python 中的 json.dumps 个字典值
Change json.dumps dictionary values in python
所以我有以下命令:
my_dict{'key1': 'value1',
'key2': 'value2',
'key3': json.dumps([
{"**subkey1**": "subvalue1", "**subkey2**": "subvalue2",},
{"**subkey1**": "other_subvalue", "**subkey2**":"other_subvalue2"}])
}
我需要的是以某种方式创建一个我必须检查的 def,并让每个 subkey2 仅针对 def 本身更改其值
和所有subkey1检查其值是否与第二个subkey1相同
请注意,我只是在谈论我有两次的 subkey1。
我不想手动设置它们。意思是我有这个 dict 全局,并从许多 def 调用它,所以我需要进行这些更改并检查每个 def
我试过的是:
def recurse_keys(my_dict, indent = ''):
print(indent+str(key))
if isinstance(my_dict[key], dict):
recurse_keys(my_dict[key], indent+' ')
recurse_keys(my_dict)
现在它只打印我所有的参数,但我不确定如何继续
示例:
my_dict{'name': 'georgi',
'famili': 'ivanov',
'drinks': json.dumps([
{"breakfast": "milk", "lunch": "beer",},
{"breakfast": "tea", "lunch":"vodka"}])
def test()
....check if both breakfast are the same and if not make them so....(all these, mean dict and the function it self are in same file)
所以我需要检查两个早餐的值是否相同(不知道它们),如果不相同,就让它们相同。
还要检查是否有空值或 0 的午餐,如果没有则再次检查
如果要编辑 json 字符串,那么最简单的方法可能是将其解码为 python 数据类型 d = json.loads(str)
,编辑它,然后将其编码回字符串str = json.dumps(d)
(python JSON).
import json
my_dict = {'name': 'georgi',\
'famili': 'ivanov',\
'drinks': json.dumps([\
{"breakfast": "milk", "lunch": "beer",},\
{"breakfast": "tea", "lunch":"vodka"}])};
ddict = json.loads(my_dict["drinks"]) # json str to python data types
seen = {}; # store the items already seen
# for each dictionary object in key3
for d in range(0,len(ddict)):
for k in ddict[d]:
if k in seen:
# update the value to the one already seen
ddict[d][k] = seen[k];
if k == "lunch" and (ddict[d] == "" or ddict[d] is None):
ddict[d] = alternative_lunch_value;
else:
seen[k] = ddict[d][k];
my_dict["drinks"] = json.dumps(ddict);
print(my_dict);
我机器上的结果是:
{'drinks': '[{"breakfast": "milk", "lunch": "beer"}, {"breakfast": "milk", "lunch": "beer"}]',
'famili': 'ivanov',
'name': 'georgi'}
更新字典值
因为您想更新 my_dict
中的值,以便它可以被其他模块读取,而不仅仅是读取值。如果您只想读取值,则可以按如下方式遍历列表 ddict
:
for value in ddict:
print("Sub1:{0} Sub2:{1}\n".format(value["**subkey1**"], value["**subkey2**"]));
但是,由于您要更新现有列表中的值,因此您需要遍历索引列表。如下图...
Range() 和 len()
Range(start,end) 给出一个包含从开始到结束的值的列表。所以 a = range(1,4)
将 [1,2,3,4]
分配给 a
。此外,len(a)
将 return 列表中的项目数,因此在本例中为 4
。使用这些原则,您可以遍历 ddict
.
for d in range(1,len(ddict):
ddict[d]["**subkey1**"] = new_value;
希望这有助于您入门。如果您使用更多关于您想要的内容的详细信息更新您的问题(即示例输入和输出,也许是伪代码),那么我们将能够为您提供更好的答案。
所以我有以下命令:
my_dict{'key1': 'value1',
'key2': 'value2',
'key3': json.dumps([
{"**subkey1**": "subvalue1", "**subkey2**": "subvalue2",},
{"**subkey1**": "other_subvalue", "**subkey2**":"other_subvalue2"}])
}
我需要的是以某种方式创建一个我必须检查的 def,并让每个 subkey2 仅针对 def 本身更改其值
和所有subkey1检查其值是否与第二个subkey1相同 请注意,我只是在谈论我有两次的 subkey1。
我不想手动设置它们。意思是我有这个 dict 全局,并从许多 def 调用它,所以我需要进行这些更改并检查每个 def
我试过的是:
def recurse_keys(my_dict, indent = ''):
print(indent+str(key))
if isinstance(my_dict[key], dict):
recurse_keys(my_dict[key], indent+' ')
recurse_keys(my_dict)
现在它只打印我所有的参数,但我不确定如何继续
示例:
my_dict{'name': 'georgi',
'famili': 'ivanov',
'drinks': json.dumps([
{"breakfast": "milk", "lunch": "beer",},
{"breakfast": "tea", "lunch":"vodka"}])
def test()
....check if both breakfast are the same and if not make them so....(all these, mean dict and the function it self are in same file)
所以我需要检查两个早餐的值是否相同(不知道它们),如果不相同,就让它们相同。
还要检查是否有空值或 0 的午餐,如果没有则再次检查
如果要编辑 json 字符串,那么最简单的方法可能是将其解码为 python 数据类型 d = json.loads(str)
,编辑它,然后将其编码回字符串str = json.dumps(d)
(python JSON).
import json
my_dict = {'name': 'georgi',\
'famili': 'ivanov',\
'drinks': json.dumps([\
{"breakfast": "milk", "lunch": "beer",},\
{"breakfast": "tea", "lunch":"vodka"}])};
ddict = json.loads(my_dict["drinks"]) # json str to python data types
seen = {}; # store the items already seen
# for each dictionary object in key3
for d in range(0,len(ddict)):
for k in ddict[d]:
if k in seen:
# update the value to the one already seen
ddict[d][k] = seen[k];
if k == "lunch" and (ddict[d] == "" or ddict[d] is None):
ddict[d] = alternative_lunch_value;
else:
seen[k] = ddict[d][k];
my_dict["drinks"] = json.dumps(ddict);
print(my_dict);
我机器上的结果是:
{'drinks': '[{"breakfast": "milk", "lunch": "beer"}, {"breakfast": "milk", "lunch": "beer"}]',
'famili': 'ivanov',
'name': 'georgi'}
更新字典值
因为您想更新 my_dict
中的值,以便它可以被其他模块读取,而不仅仅是读取值。如果您只想读取值,则可以按如下方式遍历列表 ddict
:
for value in ddict:
print("Sub1:{0} Sub2:{1}\n".format(value["**subkey1**"], value["**subkey2**"]));
但是,由于您要更新现有列表中的值,因此您需要遍历索引列表。如下图...
Range() 和 len()
Range(start,end) 给出一个包含从开始到结束的值的列表。所以 a = range(1,4)
将 [1,2,3,4]
分配给 a
。此外,len(a)
将 return 列表中的项目数,因此在本例中为 4
。使用这些原则,您可以遍历 ddict
.
for d in range(1,len(ddict):
ddict[d]["**subkey1**"] = new_value;
希望这有助于您入门。如果您使用更多关于您想要的内容的详细信息更新您的问题(即示例输入和输出,也许是伪代码),那么我们将能够为您提供更好的答案。