Python đẹp in dict

Trong trường hợp khi có lỗi rằng một cái gì đó không phải là JSON có thể tuần tự, các câu trả lời ở trên sẽ không hoạt động. Nếu bạn chỉ muốn lưu nó để con người có thể đọc được thì bạn cần gọi chuỗi đệ quy trên tất cả các phần tử không có trong từ điển của bạn. Nếu bạn muốn tải nó xuống sau đó, hãy lưu nó dưới dạng tệp Pickle, sau đó tải xuống [ví dụ:. torch.save[obj, f] hoạt động tốt]

Đây là những gì làm việc cho tôi

#%%

def _to_json_dict_with_strings[dictionary]:
    """
    Convert dict to dict with leafs only being strings. So it recursively makes keys to strings
    if they are not dictionaries.

    Use case:
        - saving dictionary of tensors [convert the tensors to strins!]
        - saving arguments from script [e.g. argparse] for it to be pretty

    e.g.

    """
    if type[dictionary] != dict:
        return str[dictionary]
    d = {k: _to_json_dict_with_strings[v] for k, v in dictionary.items[]}
    return d

def to_json[dic]:
    import types
    import argparse

    if type[dic] is dict:
        dic = dict[dic]
    else:
        dic = dic.__dict__
    return _to_json_dict_with_strings[dic]

def save_to_json_pretty[dic, path, mode='w', indent=4, sort_keys=True]:
    import json

    with open[path, mode] as f:
        json.dump[to_json[dic], f, indent=indent, sort_keys=sort_keys]

def my_pprint[dic]:
    """

    @param dic:
    @return:

    Note: this is not the same as pprint.
    """
    import json

    # make all keys strings recursively with their naitve str function
    dic = to_json[dic]
    # pretty print
    pretty_dic = json.dumps[dic, indent=4, sort_keys=True]
    print[pretty_dic]
    # print[json.dumps[dic, indent=4, sort_keys=True]]
    # return pretty_dic

import torch
# import json  # results in non serializabe errors for torch.Tensors
from pprint import pprint

dic = {'x': torch.randn[1, 3], 'rec': {'y': torch.randn[1, 3]}}

my_pprint[dic]
pprint[dic]

đầu ra

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}

Tôi không biết sao trả lại chuỗi sau đó nó không hoạt động nhưng có vẻ như bạn phải đặt các khoảng trống chứa trực tiếp vào câu lệnh trong. Lưu ý

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
0 vì nó đã được xuất đề và cũng đã hoạt động. Lưu ý Không phải tất cả các đối tượng đều có thể được chuyển đổi thành một lệnh với
{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
1, đó là lý do tại sao một số mã của tôi có kiểm tra về điều kiện này

Định nghĩa bài văn

Tôi muốn lưu chuỗi pytorch nhưng tôi vẫn gặp lỗi

TypeError: tensor is not JSON serializable

Vì vậy, tôi đã mã hóa ở trên. Lưu ý rằng có, trong Pytorch, bạn sử dụng

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
2 nhưng tệp Pickle không thể đọc được. Kiểm tra bài đăng liên quan này. https. //bàn luận. ngọn đuốc. org/t/typeerror-tensor-is-not-json-serializable/36065/3

Trong trường hợp có lỗi xảy ra mà một cái gì đó không thể tuần tự hóa json, các câu trả lời ở trên sẽ không hoạt động. Nếu bạn chỉ muốn lưu nó để con người có thể đọc được thì bạn cần gọi đệ quy chuỗi trên tất cả các phần tử không phải từ điển trong từ điển của bạn. Nếu muốn load sau thì save thành file pickle rồi load [e. g. torch.save[obj, f] hoạt động tốt]

Đây là những gì làm việc cho tôi

#%%

def _to_json_dict_with_strings[dictionary]:
    """
    Convert dict to dict with leafs only being strings. So it recursively makes keys to strings
    if they are not dictionaries.

    Use case:
        - saving dictionary of tensors [convert the tensors to strins!]
        - saving arguments from script [e.g. argparse] for it to be pretty

    e.g.

    """
    if type[dictionary] != dict:
        return str[dictionary]
    d = {k: _to_json_dict_with_strings[v] for k, v in dictionary.items[]}
    return d

def to_json[dic]:
    import types
    import argparse

    if type[dic] is dict:
        dic = dict[dic]
    else:
        dic = dic.__dict__
    return _to_json_dict_with_strings[dic]

def save_to_json_pretty[dic, path, mode='w', indent=4, sort_keys=True]:
    import json

    with open[path, mode] as f:
        json.dump[to_json[dic], f, indent=indent, sort_keys=sort_keys]

def my_pprint[dic]:
    """

    @param dic:
    @return:

    Note: this is not the same as pprint.
    """
    import json

    # make all keys strings recursively with their naitve str function
    dic = to_json[dic]
    # pretty print
    pretty_dic = json.dumps[dic, indent=4, sort_keys=True]
    print[pretty_dic]
    # print[json.dumps[dic, indent=4, sort_keys=True]]
    # return pretty_dic

import torch
# import json  # results in non serializabe errors for torch.Tensors
from pprint import pprint

dic = {'x': torch.randn[1, 3], 'rec': {'y': torch.randn[1, 3]}}

my_pprint[dic]
pprint[dic]

đầu ra

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}

Tôi không biết tại sao trả lại chuỗi sau đó in nó không hoạt động nhưng có vẻ như bạn phải đặt kết xuất trực tiếp trong câu lệnh in. Lưu ý

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
0 vì nó đã được đề xuất cũng đã hoạt động. Lưu ý rằng không phải tất cả các đối tượng đều có thể được chuyển đổi thành chính tả với
{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
1, đó là lý do tại sao một số mã của tôi kiểm tra điều kiện này

Định nghĩa bài văn

Tôi muốn lưu chuỗi pytorch nhưng tôi cứ gặp lỗi

TypeError: tensor is not JSON serializable

vì vậy tôi đã mã hóa ở trên. Lưu ý rằng có, trong pytorch bạn sử dụng

{
    "rec": {
        "y": "tensor[[[-0.3137,  0.3138,  1.2894]]]"
    },
    "x": "tensor[[[-1.5909,  0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137,  0.3138,  1.2894]]]},
 'x': tensor[[[-1.5909,  0.0516, -1.5445]]]}
2 nhưng các tệp dưa chua không thể đọc được. Kiểm tra bài viết liên quan này. https. //bàn luận. ngọn đuốc. org/t/typeerror-tensor-is-not-json-serializable/36065/3

PPrint cũng có các đối số thụt lề nhưng tôi không thích giao diện của nó

    pprint[stats, indent=4, sort_dicts=True]

đầu ra

{   'cca': {   'all': {'avg': tensor[0.5132], 'std': tensor[0.1532]},
               'avg': tensor[[0.5993, 0.5571, 0.4910, 0.4053]],
               'rep': {'avg': tensor[0.5491], 'std': tensor[0.0743]},
               'std': tensor[[0.0316, 0.0368, 0.0910, 0.2490]]},
    'cka': {   'all': {'avg': tensor[0.7885], 'std': tensor[0.3449]},
               'avg': tensor[[1.0000, 0.9840, 0.9442, 0.2260]],
               'rep': {'avg': tensor[0.9761], 'std': tensor[0.0468]},
               'std': tensor[[5.9043e-07, 2.9688e-02, 6.3634e-02, 2.1686e-01]]},
    'cosine': {   'all': {'avg': tensor[0.5931], 'std': tensor[0.7158]},
                  'avg': tensor[[ 0.9825,  0.9001,  0.7909, -0.3012]],
                  'rep': {'avg': tensor[0.8912], 'std': tensor[0.1571]},
                  'std': tensor[[0.0371, 0.1232, 0.1976, 0.9536]]},
    'nes': {   'all': {'avg': tensor[0.6771], 'std': tensor[0.2891]},
               'avg': tensor[[0.9326, 0.8038, 0.6852, 0.2867]],
               'rep': {'avg': tensor[0.8072], 'std': tensor[0.1596]},
               'std': tensor[[0.0695, 0.1266, 0.1578, 0.2339]]},
    'nes_output': {   'all': {'avg': None, 'std': None},
                      'avg': tensor[0.2975],
                      'rep': {'avg': None, 'std': None},
                      'std': tensor[0.0945]},
    'query_loss': {   'all': {'avg': None, 'std': None},
                      'avg': tensor[12.3746],
                      'rep': {'avg': None, 'std': None},
                      'std': tensor[13.7910]}}

so với

________số 8

bạn có thể in một. json bằng Python?

Chúng ta có thể sử dụng mô-đun json của Python để in đẹp dữ liệu JSON . Mô-đun json được khuyến nghị để hoạt động với các tệp JSON. Chúng ta có thể sử dụng phương thức dumps[] để lấy chuỗi JSON được định dạng đẹp.

Làm cách nào để in một mục JSON bằng Python?

Cách in đẹp chuỗi JSON bằng Python .

gọi json. loading[] để chuyển đổi chuỗi JSON thành đối tượng Python

sử dụng json. phương thức dumps[] để in đẹp đối tượng

Làm cách nào để xem JSON bằng Python?

Đọc tệp JSON bằng Python .

Nhập mô-đun json

Mở tệp bằng tên của tệp json bằng hàm open[]

Mở tệp bằng tên của tệp json bằng hàm open[]

Đọc tệp json bằng load[] và đặt dữ liệu json vào một biến

Làm cách nào để in một câu lệnh trong JSON?

Cách tiếp cận. .

Khai báo một đối tượng JSON và lưu trữ nó vào biến

Sử dụng JSON. stringify[obj] để chuyển đổi các đối tượng JavaScript thành chuỗi và hiển thị nó

Sử dụng JSON. Phương thức stringify[obj, replacer, space] để chuyển đổi các đối tượng JavaScript thành chuỗi ở định dạng đẹp. Trong ví dụ này, chúng tôi sử dụng kích thước không gian bốn

Chủ Đề