Hướng dẫn python json select multiple keys - python json chọn nhiều khóa

Tôi có cấu trúc JSON sau trong một tệp:

Show
    [
    { "Date": "timevalue", "Org": "b4256282", "Referer": "somevalue" },
    { "Date": "timevalue", "Org": "b4257482", "Referer": "somevalue" },
    { "Date": "timevalue", "Org": "b4253345", "Referer": "somevalue" },
    ....
    ]
    

    Tôi muốn trích xuất tất cả các org.

    Mã của tôi là:

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    

    Tuy nhiên, mã này không hoạt động ... Tôi nhận được lỗi sau

    TypeError: Danh sách chỉ số phải là số nguyên, không phải str

    Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai?

    hỏi ngày 26 tháng 7 năm 2017 lúc 18:33Jul 26, 2017 at 18:33

    Hướng dẫn python json select multiple keys - python json chọn nhiều khóa

    2

    Bạn cần lặp lại từng từ điển trong danh sách và sau đó chỉ lập chỉ mục với chỉ mục Dict. Cho mỗi từ điển trong danh sách,

    1. Nhận từ điển Ith
    2. Nhận giá trị liên quan đến
      import json
      
      jdata = json.loads(str_of_above_json)
      for orgs in jdata['Org']:
           print(orgs)
      
      4 trong từ điển ith
    3. In Giá trị nói từ (2)

    Trong mã, đây là

    for dict_ in jdata:
        org = dict_['Org']
        print(org)
    

    Tuy nhiên, chúng tôi có sức mạnh của danh sách hiểu theo ý của chúng tôi, vì vậy mã trên có thể được biểu diễn ngắn gọn hơn,

    jdata = json.loads(str_of_above_json)
    orgs = [x['Org'] for x in jdata]      
    print(orgs)       
    

    Tại sao mã hiện tại của bạn không hoạt động? Bạn làm

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    5, nhưng
    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    6 là một hoạt động lập chỉ mục và điều này sẽ gây ra lỗi vì
    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    7 là một danh sách.

    You do
    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    5, but
    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    6 is a dict indexing operation, and this will throw errors because
    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    7 is a list.

    Đã trả lời ngày 26 tháng 7 năm 2017 lúc 18:37Jul 26, 2017 at 18:37

    Hướng dẫn python json select multiple keys - python json chọn nhiều khóa

    cs95cs95cs95

    350K87 Huy hiệu vàng643 Huy hiệu bạc694 Huy hiệu Đồng87 gold badges643 silver badges694 bronze badges

    0

    Hãy nhớ rằng, dữ liệu của bạn đã được tải trong cấu trúc Python sẽ là một danh sách các từ điển. Để giữ cho nó đơn giản, nó chỉ là:

    [{...}, {...}, {...}]
    

    Từ khóa ở đây là một danh sách. Vì vậy, của bạn cho vòng lặp sẽ/nên lặp lại trong một danh sách, cung cấp cho bạn từng từ điển ở mỗi lần lặp.

    Tại thời điểm này, sau đó bạn có thể truy cập khóa 'org'.

    Vì vậy, khi bạn làm:

    for orgs in jdata:
        print(orgs) # each dictionary
    

    Tại thời điểm đó, bây giờ bạn có thể truy cập khóa

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    4 trong từ điển:

    for orgs in jdata:
        print(orgs) # each dictionary
        print(orgs['Org']) # The value of 'Org' in each dictionary
    

    Đã trả lời ngày 26 tháng 7 năm 2017 lúc 18:41Jul 26, 2017 at 18:41

    idjawidjawidjaw

    24.4K7 Huy hiệu vàng63 Huy hiệu bạc79 Huy hiệu đồng7 gold badges63 silver badges79 bronze badges

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata:
        print(orgs["Org"])
    

    Bạn cần lặp lại trong danh sách [] sau đó in phần "org" của mỗi dữ liệu.

    Đã trả lời ngày 26 tháng 7 năm 2017 lúc 18:36Jul 26, 2017 at 18:36

    JominjominJomin

    1132 Huy hiệu bạc8 Huy hiệu Đồng2 silver badges8 bronze badges

    Tất cả các câu trả lời khác là chính xác và sẽ giải quyết vấn đề hiện tại của bạn.

    Nhưng nếu bạn thao tác rất nhiều với các cấu trúc như thế này, bạn có thể thấy gói

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    9 hữu ích (tiết lộ đầy đủ: Tôi là tác giả của gói đó).

    Ví dụ: giả sử

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    7 của bạn được tải):

    >>> import plucky
    >>> plucky.plucks(data, '.Org')
    ['b4256282', 'b4257482', 'b4253345']
    

    or:

    >>> plucky.pluckable(data).Org
    ['b4256282', 'b4257482', 'b4253345']
    

    Đã trả lời ngày 26 tháng 7 năm 2017 lúc 19:10Jul 26, 2017 at 19:10

    Randomirrandomirrandomir

    Huy hiệu vàng 17.4K11 gold badge39 silver badges54 bronze badges


    Bạn có thể phân tích các tệp JSON bằng mô -đun JSON trong Python. Mô -đun này phân tích JSON và đặt nó vào một dict. Sau đó, bạn có thể nhận được các giá trị từ điều này như một dict bình thường. Ví dụ: nếu bạn có JSON với nội dung sau -

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    0

    Thí dụ

    Bạn có thể tải nó trong chương trình Python của mình và lặp qua các khóa của nó theo cách sau -

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    1

    # Bây giờ bạn có thể sử dụng dữ liệu như một dict bình thường -

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    2

    Đầu ra

    Điều này sẽ cung cấp cho đầu ra -

    import json
    
    jdata = json.loads(str_of_above_json)
    for orgs in jdata['Org']:
         print(orgs)
    
    3

    Nếu bạn cũng muốn lặp lại các giá trị phụ, bạn sẽ phải viết một hàm đệ quy có thể lặp lại trên dict giống như cây này.

    Hướng dẫn python json select multiple keys - python json chọn nhiều khóa

    Cập nhật vào ngày 05-Mar-2020 08:14:19

    • Câu hỏi và câu trả lời liên quan
    • Python - giao nhau hai từ điển qua các chìa khóa
    • Từ điển Python với các khóa có nhiều đầu vào
    • Tập hợp mongoDB với nhiều khóa
    • Làm thế nào tôi có thể xử lý nhiều phím bàn phím bằng selenium webdriver?
    • Làm cách nào để thấy tất cả các phím nước ngoài vào cột bảng?
    • Làm thế nào để lặp qua nhiều danh sách bằng Python?
    • So sánh các khóa & giá trị trong đối tượng JSON khi một đối tượng có thêm các khóa trong JavaScript
    • Kiểm tra xem có tồn tại nhiều khóa có tồn tại trong từ điển trong Python không
    • Làm thế nào để bạn lặp qua một mảng c#?
    • Làm thế nào để tạo từ điển Python với các khóa trùng lặp?
    • Làm thế nào để phân tích một JSON mà không có các phím trùng lặp bằng Gson trong Java?
    • Làm thế nào để thực hiện hiệu quả các cách khác biệt với nhiều khóa trong MongoDB?
    • Làm cách nào để sao chép một tệp trong Python?
    • Các khóa liên quan đến các giá trị trong từ điển trong Python
    • Chìa khóa và phòng ở Python