python - 在 python 中更改 json.dumps 字典值

标签 python json dictionary nested

所以我有以下字典:

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,我有两次。

我不想手动设置它们。意味着我有这个全局字典,并从许多定义中调用它,所以我需要进行这些更改并检查每个定义的内部

我尝试的是:

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) 将返回列表中的项目数,因此在本例中为 4。使用这些主体,您可以迭代 ddict

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

希望这可以帮助您入门。如果您用更多关于您想要的内容的详细信息(即示例输入和输出,也许是伪代码)更新您的问题,那么我们将能够为您提供更好的答案。

关于python - 在 python 中更改 json.dumps 字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035925/

相关文章:

json - 类型 Undefined 不可分配给类型 [Film]

javascript - 使用 jQuery 根据国家和州填充州和城市下拉菜单

python - 如何使用 PIL 保存超过 3 个 channel 的图像?

python - 如何组合一个 numpy 数组和一个文本列并导出到 csv

python - 这个很热吗

python - 来自字典的 map 列表

python - 如果我们没有 key ,如何创建一个标识一组数字的 key 以便在集合中检索一组?

c# - 在 C# 中解释这个 python 表达式

javascript - Angular .js : How to use templates and JSON for building a SPA

python - 为什么我不能在不可散列实例的明显可散列方法上调用 hash()?