在python中更改json.dumps字典值

时间:2016-01-27 11:20:42

标签: python json dictionary nested

所以我跟随dict:

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的午餐,如果没有,为了使其成为

1 个答案:

答案 0 :(得分:0)

如果你想编辑一个json字符串,那么最简单的方法就是将它解码为python数据类型d = json.loads(str),编辑它,然后将其编码回字符串str = json.dumps(d)({{3} })。

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'}

更新dict值

因为您想要更新my_dict中的值,以便其他模块可以读取它,而不是只读取值。如果您只想读取值,那么您可以按如下方式遍历列表ddict

for value in ddict:
    print("Sub1:{0} Sub2:{1}\n".format(value["**subkey1**"], value["**subkey2**"]));

但是,由于您要更新现有列表中的值,因此您需要迭代索引列表。如下图所示......

Range()和len()

范围(开始,结束)给出一个列表,其中包含从开始到结束的值。因此a = range(1,4)会将[1,2,3,4]分配给a。另外len(a)将返回列表中的项目数,因此在这种情况下为4。使用这些主体,您可以遍历ddict

for d in range(1,len(ddict):
    ddict[d]["**subkey1**"] = new_value;

希望这有助于您入门。如果您使用更多详细信息更新您的问题(例如输入和输出示例,也许是psudo代码),那么我们将能够为您提供更好的答案。