目录
  • 1、无序字典
  • 2、有序字典
  • 3、一键多值字典
  • 4、写入json
    • 4.1 无缩进
    • 4.2 有缩进
  • 方法补充

    Python中有序字典和无序字典,一键多值字典。

    Python将字典内容写入json文件。

    1、无序字典

    目前了解三种,在Python中直接默认的是无序字典,这种不会按照你插入的顺序排序,即使你对字典排序后,返回的也是一个list变量,而不是字典,倘若你将这个list字典后,又会变回无序字典。

    例子如下:

    import operator
    
    x = {"label": "haha", "data": 234, "score": 0.3}
    sorted_x = sorted(x.items(), key=operator.itemgetter(0))
    print x
    print type(x)
    print sorted_x
    print type(sorted_x)
    print dict(sorted_x)

    Python实现将字典内容写入json文件

    2、有序字典

    如果我们想保持字典按照我们插入的顺序有序怎么办?可以用OrderedDict来初始化字典。

    例子如下:

    from collections import OrderedDict
    
    x = OrderedDict()
    
    x["label"] = "haha"
    x["data"] = 234
    x["score"] = 0.3
    
    print x
    print type(x)
    

    Python实现将字典内容写入json文件

    3、一键多值字典

    如果我们想用一键多值字典怎么办,可以使用defaultdict,例子如下:

    from collections import defaultdict
    
    
    video = defaultdict(list)
    video["label"].append("haha")
    video["data"].append(234)
    video["score"].append(0.3)
    video["label"].append("xixi")
    video["data"].append(123)
    video["score"].append(0.7)
    
    print video
    print type(video)

    Python实现将字典内容写入json文件

    4、写入json

    字典内容写入json时,需要用json.dumps将字典转换为字符串,然后再写入。

    json也支持格式,通过参数indent可以设置缩进,如果不设置的话,则保存下来会是一行。

    例子:

    4.1 无缩进

    from collections import defaultdict, OrderedDict
    import json
    
    video = defaultdict(list)
    video["label"].append("haha")
    video["data"].append(234)
    video["score"].append(0.3)
    video["label"].append("xixi")
    video["data"].append(123)
    video["score"].append(0.7)
    
    test_dict = {
        'version': "1.0",
        'results': video,
        'explain': {
            'used': True,
            'details': "this is for josn test",
      }
    }
    
    json_str = json.dumps(test_dict)
    with open('test_data.json', 'w') as json_file:
        json_file.write(json_str)
    

    Python实现将字典内容写入json文件

    4.2 有缩进

    from collections import defaultdict, OrderedDict
    import json
    
    video = defaultdict(list)
    video["label"].append("haha")
    video["data"].append(234)
    video["score"].append(0.3)
    video["label"].append("xixi")
    video["data"].append(123)
    video["score"].append(0.7)
    
    test_dict = {
        'version': "1.0",
        'results': video,
        'explain': {
            'used': True,
            'details': "this is for josn test",
      }
    }
    
    json_str = json.dumps(test_dict, indent=4)
    with open('test_data.json', 'w') as json_file:
        json_file.write(json_str)
    

    Python实现将字典内容写入json文件

    方法补充

    下面是参考上文代码整理出的另一种实现方法,可以参考一下

    """
    将整个数据集分为train和test,相应的也分别分配整个json文件
    """
    import os
    import random
    import json
    
    total_select_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan_select"
    total_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan.json"
    test_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test"
    test_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\test\has_yiliuwu\yuedongguan_test\yuedongguan_test.json"
    train_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan"
    train_json_path = r"C:\Users\9ling\Desktop\YiLiuWuDataset\train\yuedongguan\yuedongguan.json"
    
    data = json.load(open(total_json_path))["labels"]
    # test_data = json.load(open(test_json_path))["labels"]
    all_select_path = os.listdir(total_select_path)
    all_file_path = []  # 待分配的图片路径
    for item in all_select_path:
        file_path = os.path.join(total_select_path, item)
        all_file_path.append(file_path)
    # print(all_file_path)
    
    idx = [i for i in range(len(all_select_path))]
    random.shuffle(idx)  # 在idx上改变
    
    
    def copy_dir(src_path, target_path):  # src_path原文件,target_path目标文件
        if os.path.isdir(src_path) and os.path.isdir(target_path):
            filelist_src = os.listdir(src_path)
            for file in filelist_src:
                path = os.path.join(os.path.abspath(src_path), file)
                if os.path.isdir(path):
                    path1 = os.path.join(os.path.abspath(target_path), file)
                    if not os.path.exists(path1):
                        os.mkdir(path1)
                    copy_dir(path, path1)
                else:
                    with open(path, 'rb') as read_stream:
                        contents = read_stream.read()
                        path1 = os.path.join(target_path, file)
                        with open(path1, 'wb') as write_stream:
                            write_stream.write(contents)
            return True
    
        else:
            return False
    
    
    test_data_dir = {"labels": []}
    for item in idx[:41]:
        with open(all_file_path[item], 'rb') as read_stream:
            contents = read_stream.read()
            path1 = os.path.join(test_path, all_file_path[item].split("\\")[-1])  # 测试集图片的路径
            with open(path1, 'wb') as write_stream:
                write_stream.write(contents)
                for s in data:
                    if s["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]:
                        test_data_dir["labels"].append(s)
                    # print(s)
    json_test_str = json.dumps(test_data_dir, indent=4)
    with open(test_json_path, 'w') as json_file:
        json_file.write(json_test_str)
    print(test_data_dir)
    print(len(test_data_dir["labels"]))
    print("*"*30)
    
    train_data_dir = {"labels": []}
    for item in idx[41:]:
        with open(all_file_path[item], 'rb') as read_stream:
            contents = read_stream.read()
            path2 = os.path.join(train_path, all_file_path[item].split("\\")[-1])
            with open(path2, 'wb') as write_stream:
                write_stream.write(contents)
                for s1 in data:
                    if s1["filename"].split("\\")[-1] == all_file_path[item].split("\\")[-1]:
                        train_data_dir["labels"].append(s1)
    json_train_str = json.dumps(train_data_dir, indent=4)
    with open(train_json_path, 'w') as json_file:
        json_file.write(json_train_str)
    print(train_data_dir)
    print(len(train_data_dir["labels"]))
    # print(s)
    
    

    以上就是Python实现将字典内容写入json文件的详细内容,更多关于Python字典写入json的资料请关注其它相关文章!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。